成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Vue開(kāi)發(fā)總結(jié) 及 一些最佳實(shí)踐 (已更新)

NotFound / 1947人閱讀

摘要:基本開(kāi)發(fā)環(huán)境創(chuàng)建的項(xiàng)目,作為代碼編寫(xiě)工具插件推薦插件配置文章目錄項(xiàng)目目錄結(jié)構(gòu)介紹框架選擇處理請(qǐng)求二次封裝項(xiàng)目目錄結(jié)構(gòu)簡(jiǎn)介業(yè)務(wù)相關(guān)靜態(tài)文件全局組件基礎(chǔ)樣式布局樣式及工具引入請(qǐng)求配置路由全局狀態(tài)管理工具文件入口文件主要配置文件頁(yè)面檢查配置測(cè)試

基本開(kāi)發(fā)環(huán)境

vue-cli3 創(chuàng)建的項(xiàng)目,vscode 作為代碼編寫(xiě)工具
vscode插件推薦:vscode 插件配置

文章目錄

項(xiàng)目目錄結(jié)構(gòu)介紹

UI 框架選擇

main,js 處理

axios 請(qǐng)求二次封裝

1. 項(xiàng)目目錄結(jié)構(gòu)簡(jiǎn)介
├── public // index.html
├── src // 業(yè)務(wù)相關(guān)
│ ├── assets // 靜態(tài)文件(css, images)
│ ├── components // 全局組件
│ ├── layouts // 基礎(chǔ)樣式布局
│ ├── plugin // 樣式及工具引入
│ ├── request // 請(qǐng)求配置
│ ├── router // 路由
│ ├── store // 全局狀態(tài)管理
│ ├── utils // 工具文件
│ ├── app.vue // 入口文件
│ ├── main.js // 主要配置文件
│ └── views // 頁(yè)面
├── .eslintrc.js // eslint 檢查配置
├── .env.release // 測(cè)試環(huán)境變量
├── .env.pre-build // 預(yù)發(fā)環(huán)境變量
└── vue.config.js // webpack 打包配置
2. UI 框架選擇

經(jīng)框架選擇驗(yàn)證對(duì)比 element,iview,ant-design-vue
最終選擇 ant-design-vue,傳送門(mén) https://vue.ant.design/docs/vue/introduce-cn/

優(yōu)點(diǎn):

好看

文檔清晰

使用方便,示例清晰

bug少,組件使用順滑

性能較好,有單例測(cè)試

3. main.js 分散處理

main.js 作為操作入口,很多東西需要引入,代碼體積過(guò)大,需要進(jìn)行優(yōu)化,邏輯清晰,方便文虎

1. 處理三方框架

新建一個(gè)文件夾 plugin,存放所有需要引入的 main.js 掛載的組件、方法、第三方庫(kù)

ant-design.js
按照官方推薦,按需引入
優(yōu)點(diǎn): 我們開(kāi)發(fā)項(xiàng)目不一定能使用到所有的組件,這樣引入減小項(xiàng)目體積

import Vue from "vue"
import {
  ConfigProvider,
  Pagination,
  Steps,
  Cascader,
  Row,
  Col,
  Table
} from "ant-design-vue"
import "ant-design-vue/dist/antd.less"

Vue.use(ConfigProvider)
Vue.use(Steps)
Vue.use(Cascader)
Vue.use(Row)
Vue.use(Col)
Vue.use(Table)

func.js
自定義的一些方法,掛到 vue 原型上

import Vue from "vue"
import api from "@/request/api"
import { isInvalid, isValid } from "@/utils/verify"
// 請(qǐng)求接口
Vue.prototype.$api = api
// 驗(yàn)證工具
Vue.prototype.$isInvalid = isInvalid
Vue.prototype.$isValid = isValid

這樣,分散幾個(gè)文件,然后將他們統(tǒng)一引入到 index.js

import "./ant-design.js"
import "./func.js"
import "./moment"

最后放入 main.js,整個(gè)世界都清晰簡(jiǎn)單了

`import "./plugin"`
2. 全局引入自定義組件

收到評(píng)論區(qū)大神提醒,研究了一下 webpack 中的 require.context

require.contextwebpack 中,用來(lái)創(chuàng)建自己的(模塊)上下文

webpack 會(huì)在構(gòu)建的時(shí)候解析代碼中的 require.context()

require.context(directory, useSubdirectories = false, regExp = /^/) 函數(shù)接收三個(gè)參數(shù):

要搜索的文件夾目錄
是否還應(yīng)該搜索它的子目錄
以及一個(gè)匹配文件的正則表達(dá)式
// 語(yǔ)法
require.context(directory, useSubdirectories = false, regExp = /^.//);
// 示例
require.context("./test", false, /.test.js$/);

所以,在 main.js 中,直接可以注冊(cè)我所有的自定義組件,非常簡(jiǎn)單

// 自定義組件
const requireComponents = require.context("@v/components", true, /.vue$/)
// 打印結(jié)果
// 遍歷出每個(gè)組件的路徑
requireComponents.keys().map(fileName => {
  // 獲取組件配置
  const componentConfig = requireComponents(fileName)
  // 剝?nèi)ノ募_(kāi)頭的 `./` 和`.vue`結(jié)尾的擴(kuò)展名
  const componentName = fileName.replace(/^.//, "").replace(/.vue$/, "")
  // 全局注冊(cè)組件
  Vue.component(
    componentName.replace(///, "-"),
    // 如果這個(gè)組件選項(xiàng)是通過(guò) `export default` 導(dǎo)出的,那么就會(huì)優(yōu)先使用 `.default`,否則回退到使用模塊的根。
    componentConfig.default || componentConfig
  )
})

4. axios 請(qǐng)求二次封裝

axios 不過(guò)多介紹,上干貨

新建文件 axios

請(qǐng)求攔截器
根據(jù)自己業(yè)務(wù)需求,修改請(qǐng)求頭以及超時(shí)時(shí)間等

import axios from "axios"
axios.interceptors.request.use(
  config => {
    // 判斷是否是提交文件,還是常規(guī)請(qǐng)求
    if (config.data instanceof FormData) {
      config.headers = {
        "Content-Type": "multipart/form-data" // 此處格式自定義
      }
    } else {
      config.data = JSON.stringify(config.data)
      config.headers = {
        "Content-Type": "application/json", // 此處格式自定義
        token: getLocalStorage("token")
      }
    }
    config.withCredentials = true
    config.timeout = 5000    // 超時(shí)時(shí)間
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

響應(yīng)攔截器

根據(jù)后臺(tái)返回?cái)?shù)據(jù),做些統(tǒng)一處理

// 添加響應(yīng)攔截器
axios.interceptors.response.use(
  res => {
    let data = res.data
    if (res.statusCode !== 200) {
      if (data.failureReason === 4011 || data.failureReason === 4012) {
        console.log("需要重新登錄")
      }
    } else {
      if (data.resultStates === 0) {
        return data
      } else {
        return Promise.reject(data)
      }
    }
  },
  error => {
    notification["error"]({
      message: "提示",
      duration: 2,
      description: "后臺(tái)報(bào)錯(cuò)"
    })
    // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
    return Promise.reject(error)
  }
)

封裝get,post,并導(dǎo)出

export function get (url, params = {}) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params
      })
      .then(response => {
        if (response.success) {
          resolve(response.data)
        }
      })
      .catch(err => {
        reject(err)
      })
  })
}

/**
 * 封裝post請(qǐng)求
 * @param url
 * @param data

 */
export function post (url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.post(url, data).then(
      response => {
        if (response.success) {
          resolve(response.data)
        }
      },
      err => {
        reject(err)
      }
    )
  })
}
```

重點(diǎn):新建 api.js 文件

將后臺(tái)請(qǐng)求接口全部寫(xiě)在此處,統(tǒng)一管理

import { get, post } from "./axios"
const api = {
     reqLogin: p => post("api/user/addFormId", p),
      reqGetInfo: p => post("api/user/addFormId", p)
}
export default api

// 將 api 引入到 main.js 中
Vue.prototype.$api = api

// 這樣頁(yè)面中使用
this.$api.reqLogin().then(res => {
      console.log(res)
})

是不是非常方便?鼓掌 啪啪啪啪......

web 前端群招人,有夢(mèng)想的一群小青年 https://www.jianshu.com/p/33eee1c26b8a

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109519.html

相關(guān)文章

  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥(niǎo)雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門(mén),久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    sutaking 評(píng)論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥(niǎo)雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門(mén),久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    khs1994 評(píng)論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0
  • 大前端 - 收藏集 - 掘金

    摘要:是目前唯一一個(gè)支持同步調(diào)用的跨平臺(tái)年度上最多的個(gè)項(xiàng)目前端掘金年接近尾聲,在最近的幾篇文章中,會(huì)整理總結(jié)一些年度開(kāi)源項(xiàng)目。 JS 全棧教程 - 前端 - 掘金本課程是基于阮一峰的 js 全棧教程的視頻版本,免費(fèi)供大家觀看... 2016 年 10 個(gè)最佳的 CodePen 作品 - 前端 - 掘金說(shuō)到 CodePen,前端開(kāi)發(fā)者們肯定不會(huì)陌生。如果說(shuō) Dribbble 是設(shè)計(jì)師們聚集的圣...

    honhon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<