摘要:入口文件,影響全局,作用是引入全局使用的庫(kù)公共的樣式和方法設(shè)置路由等。項(xiàng)目里總會(huì)有一些復(fù)用的組件,例如彈出框發(fā)送手機(jī)驗(yàn)證碼圖片上傳等,將它們作為通用組件,避免重復(fù)工作結(jié)構(gòu)如下可以根據(jù)功能模塊建立文件夾,放置本功能會(huì)用到的通用組件。
上一篇文章 https://segmentfault.com/a/11... 介紹了項(xiàng)目里文件夾的分類和作用,這次主要說(shuō)明 src 文件夾里具體的文件分類和內(nèi)容。
先上 src 文件夾的結(jié)構(gòu)圖:
文件及文件夾作用 App.vueApp.vue: 根組件,pages 里的組件會(huì)被插入此組件中,此組件再插入 index.html 文件里,形成單頁(yè)面應(yīng)用
根組件里面是這樣子的:
其中,
基本上根組件沒(méi)什么交互要做,底部的樣式其實(shí)也可以放在全局的樣式表里。
main.jsmain.js: 入口 js 文件,影響全局,作用是引入全局使用的庫(kù)、公共的樣式和方法、設(shè)置路由等。
這個(gè)是負(fù)責(zé)配置影響全局的內(nèi)容的文件,具體會(huì)有以下幾種作用:
1、引入vue 以及相關(guān)的庫(kù)
import Vue from "vue" //引入 vue import store from "./store" //引入 vuex import router from "./router"; //引入路由配置文件 import App from "./App" //引入根組件
2、 引入需要用到的第三方庫(kù)(注意注冊(cè)使用方式的區(qū)別)
// 引入element-ui import ElementUI from "element-ui"; import "element-ui/lib/theme-default/index.css"; Vue.use(ElementUI); // 引入字體圖標(biāo)樣式,這里使用了阿里媽媽的 iconfont 字體庫(kù) import "@assets/iconfont/iconfont.css"; import "@assets/iconfont/iconfont.js"; // 引入copy 信息組件 import VueClipboards from "vue-clipboards"; Vue.use(VueClipboards); // 引入 axios 庫(kù) import axios from "axios" // 引入 d3 圖形庫(kù) import * as d3 from "d3" // 引入國(guó)際化的庫(kù) import VueI18n from "vue-i18n"; Vue.use(VueI18n); //引入自定義的 json 格式中英文對(duì)照文件 import zh from "@assets/lang/zh-CN" import en from "@assets/lang/en-US" Vue.config.lang = "zh-cn" //設(shè)置默認(rèn)中文 Vue.locale("zh-cn", zh) Vue.locale("en", en) // 引入時(shí)間轉(zhuǎn)換模塊 import moment from "moment"; moment.locale("zh-cn"); Vue.prototype.$moment = moment; //將 moment 模塊轉(zhuǎn)換成 Vue 的原型方法,在組件里可以直接使用 this.$moment(time) // 引入圖表 import ECharts from "vue-echarts"; Vue.component("chart", ECharts); //注冊(cè) Echarts 成為全局組件,在組件里可以直接調(diào)用
3、 引入自定義的庫(kù)
// 引入銀行卡圖標(biāo)樣式 import "@assets/icon-bank/iconfont.js"; // iconfont 上收集的銀行卡圖標(biāo) // 引入自定義的http模塊 import { AjaxApi } from "@http/AjaxApi.js"; //http 文件夾里自定義的處理 api 接口的文件,導(dǎo)出一個(gè)包含所有與后臺(tái)接口交流的函數(shù)的對(duì)象 Vue.prototype.$axios = AjaxApi; //加入 Vue 原型方法,組件里通過(guò) this.$axios.xxx() 調(diào)用 // 引入公共方法 import commonMixins from "@mixins/common-mixins.js"; //mixins 文件夾里自定義的通用函數(shù)的集合 Vue.mixin(commonMixins); //全局注冊(cè)混合
4、 引入自定義的公共樣式,使得組件內(nèi)可以用scoped定義自身的樣式
// 引入公共樣式以及修改過(guò)的 element 樣式 import "@assets/css/common.less" import "@assets/css/theme.less"
5、 定義一些簡(jiǎn)短的不需要多帶帶引入的全局修改
// 在html5 history 模式下,在form表單的組件(input輸入框等)里點(diǎn)擊enter,會(huì)自動(dòng)將表單數(shù)據(jù)以get的方式發(fā)送到后臺(tái),需要阻止默認(rèn)事件 document.onkeydown = function(e) { var e = e || event; if(e.keyCode == 13) { e.preventDefault ? e.preventDefault() : (e.returnValue = false); } }; // 格式化金額,每三位加逗號(hào),可選保留幾位小數(shù) Number.prototype.format = function(n, x) { var re = "d(?=(d{" + (x || 3) + "})+" + (n > 0 ? "." : "$") + ")"; return this.toFixed(Math.max(0, ~~n)).replace(new RegExp(re, "g"), "$&,"); };
6、 設(shè)置vue的全局配置,在啟動(dòng)應(yīng)用前應(yīng)用
Vue.config.productionTip = false; // 阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示
7、 指定渲染的文件
new Vue({ el: "#app", template: "assets 文件夾" , router, store, components: { App } })
assets: 放置靜態(tài)資源,包括公共的 css 文件、 js 文件、iconfont 字體文件、img 圖片文件以及其他資源類文件。
結(jié)構(gòu)如下:
css 文件夾里會(huì)有重置 css 樣式的文件以及其他全局樣式文件。
js 文件夾里放置了包含銀行字典和全國(guó)省市的字典文件,在組件里引用之后遍歷獲取數(shù)據(jù)。
components 文件夾components: 放置通用模塊組件。項(xiàng)目里總會(huì)有一些復(fù)用的組件,例如彈出框、發(fā)送手機(jī)驗(yàn)證碼、圖片上傳等,將它們作為通用組件,避免重復(fù)工作;
結(jié)構(gòu)如下:
可以根據(jù)功能模塊建立文件夾,放置本功能會(huì)用到的通用組件。例如 login 文件夾里可以放置注冊(cè)、登錄、重置密碼這幾個(gè)功能會(huì)用的共同模塊文件(賬號(hào)、密碼、圖形驗(yàn)證碼、短信驗(yàn)證碼); account-center 文件夾放置修改賬號(hào)相關(guān)的模塊。
全局通用的公共模塊可以不需要建立文件夾。
http 文件夾http: 放置與后臺(tái) api 相關(guān)的文件。這里面有 axios 庫(kù)的實(shí)例配置文件、使用配置的 axios 實(shí)例接入 api 獲取數(shù)據(jù)的函數(shù)的集合的文件;
結(jié)構(gòu)如下:
config.js 是根據(jù)項(xiàng)目需求配置的 axios 實(shí)例文件,通過(guò) axios.create([config]) 創(chuàng)建,可以配置諸如指定成功的狀態(tài)碼、序列化 params、設(shè)置 headers 、修改 token 、設(shè)置全局請(qǐng)求/響應(yīng)攔截器、設(shè)置 baseURL 等。
AjaxApi.js 是通過(guò)導(dǎo)入 config.js 實(shí)例,傳入 API 和其他參數(shù),給每個(gè) API 配置一個(gè)專屬函數(shù),再集合導(dǎo)出成對(duì)象的文件。例子如下:
mixins 文件夾mixins: 放置混合選項(xiàng)的文件。具體來(lái)說(shuō),相當(dāng)于是公用函數(shù)的集合,在組件中引用時(shí),可以作用于組件而不必書寫重復(fù)的方法
個(gè)人認(rèn)為,相當(dāng)于是沒(méi)有 和 的組件,例子如下:
pages 文件夾pages: 放置主要頁(yè)面的組件。例如登錄頁(yè)、用戶信息頁(yè)等。通常是這里的組件本身寫入一些結(jié)構(gòu),再引入通用模塊組件,形成完整的頁(yè)面
這里面就是會(huì)被插入根組件的
都是單文件組件,沒(méi)有特殊的結(jié)構(gòu),就不放圖了。
router 文件夾router: 放置路由設(shè)置文件,指定路由對(duì)應(yīng)的組件,設(shè)置路由鉤子
例子如下:
import Vue from "vue"; import Router from "vue-router"; import Tab from "@pages/tab"; import { MessageBox } from "element-ui"; Vue.use(Router); const router = new Router({ //新建路由 routes: [ { path: "/", redirect: "/signin" //重定向路由 }, { path: "/signin", name: "signIn", //命名路由 component: (resolve) => { //按需加載 require(["@pages/sign-in"], resolve); } }, { path: "/signup", name: "signUp", component: (resolve) => { require(["@pages/sign-up"], resolve); } }, { path: "/tab", component: Tab, children: [ //嵌套路由 { path: "index", name: "index", component: (resolve) => { require(["@pages/index"], resolve); } } ] } ] }); router.beforeEach((to, from, next) => { //檢測(cè) token ,跳轉(zhuǎn)登錄頁(yè) if (checkPathRequiredAuth(to.path) && !sessionStorage.token) { sessionStorage.clear(); MessageBox({ title: "跳轉(zhuǎn)提示", message: "用戶認(rèn)證已過(guò)期或不存在,確認(rèn)后跳轉(zhuǎn)到登錄頁(yè)", confirmButtonText: "確定", type: "warning", callback: action => { next({ path: "/signin" }); } }); } else { next(); } }); export default router;store 文件夾
store: 放置 vuex 需要的狀態(tài)關(guān)聯(lián)文件,設(shè)置公共的 state、mutations 等
1、如果項(xiàng)目結(jié)構(gòu)不是很復(fù)雜,多是父子組件的通信,可以使用 props 傳遞數(shù)據(jù),$emit 和 on 事件通信,store 文件夾里就只需創(chuàng)建 js 文件。
結(jié)構(gòu)如下:
2、反之,主要使用 vuex 來(lái)傳遞數(shù)據(jù)和通信的話,需要按照模塊來(lái)劃分 modules 。store 文件夾里除了有index.js 和全局相關(guān)的 js 文件外,還有 modules 文件夾, 在 modules 文件夾里根據(jù)模塊創(chuàng)建對(duì)應(yīng)的 js 文件,導(dǎo)出,最后在 store 文件夾下一級(jí)的 index.js 里導(dǎo)入。
store 結(jié)構(gòu)如下:
modules 結(jié)構(gòu)如下:
sign-in.js:
index.js:
要注意的是,使用 modules 分割模塊后,組件里獲取 state 時(shí)要指明對(duì)應(yīng)的 modules。
computed: { ...mapState({ data: state => state.signIn.data, //sign-in.js 里的 state user: state => state.user //index.js 里的 state }) }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92073.html
摘要:入口文件,影響全局,作用是引入全局使用的庫(kù)公共的樣式和方法設(shè)置路由等。項(xiàng)目里總會(huì)有一些復(fù)用的組件,例如彈出框發(fā)送手機(jī)驗(yàn)證碼圖片上傳等,將它們作為通用組件,避免重復(fù)工作結(jié)構(gòu)如下可以根據(jù)功能模塊建立文件夾,放置本功能會(huì)用到的通用組件。 上一篇文章 https://segmentfault.com/a/11... 介紹了項(xiàng)目里文件夾的分類和作用,這次主要說(shuō)明 src 文件夾里具體的文件分類和...
摘要:文件夾結(jié)構(gòu)文件夾里的文件夾設(shè)置是靈活的,可以根據(jù)自己的習(xí)慣進(jìn)行,不必雷同。對(duì)文件夾配置的總結(jié)先到此為止,下一篇文章會(huì)是對(duì)文件夾里具體文件的配置和例子總結(jié),有需要的可以去看看。 之前一段時(shí)間都在使用 vue 開發(fā)后臺(tái)管理系統(tǒng),在摸索的過(guò)程中對(duì) vue 本身和模塊化、規(guī)范化開發(fā)有了更深的認(rèn)知,現(xiàn)在記錄下來(lái),希望對(duì)其他需要開發(fā)項(xiàng)目的人有幫助。 項(xiàng)目配置 首先,在確定好使用的框架和組件庫(kù)后,先...
摘要:文件夾結(jié)構(gòu)文件夾里的文件夾設(shè)置是靈活的,可以根據(jù)自己的習(xí)慣進(jìn)行,不必雷同。對(duì)文件夾配置的總結(jié)先到此為止,下一篇文章會(huì)是對(duì)文件夾里具體文件的配置和例子總結(jié),有需要的可以去看看。 之前一段時(shí)間都在使用 vue 開發(fā)后臺(tái)管理系統(tǒng),在摸索的過(guò)程中對(duì) vue 本身和模塊化、規(guī)范化開發(fā)有了更深的認(rèn)知,現(xiàn)在記錄下來(lái),希望對(duì)其他需要開發(fā)項(xiàng)目的人有幫助。 項(xiàng)目配置 首先,在確定好使用的框架和組件庫(kù)后,先...
閱讀 1221·2021-11-22 15:22
閱讀 3924·2021-10-19 13:13
閱讀 3698·2021-10-08 10:05
閱讀 3361·2021-09-26 10:20
閱讀 3079·2019-08-29 14:21
閱讀 2264·2019-08-27 10:55
閱讀 1922·2019-08-26 10:31
閱讀 2644·2019-08-23 16:47