vue 項(xiàng)目總結(jié)一組件開發(fā)

上一篇文章?http://www.reibang.com/p/674e75b41642?介紹了項(xiàng)目里文件夾的作用分類和作用,這次主要說(shuō)明 src 文件夾里具體的文件分類和內(nèi)容眼耀。



先上 src 文件夾的結(jié)構(gòu)圖:


src



App.vue: 根組件佩憾,pages 里的組件會(huì)被插入此組件中妄帘,此組件再插入 index.html 文件里,形成單頁(yè)面應(yīng)用

根組件里面是這樣子的:


App.vue

其中鬼廓,<router-view>?組件是一個(gè) functional 組件致盟,渲染路徑匹配到的視圖組件。渲染的組件還可以內(nèi)嵌自己的蚣录,根據(jù)嵌套路徑眷篇,渲染嵌套組件荔泳。這樣,就實(shí)現(xiàn)了單頁(yè)面下昧港,根據(jù)不同路由支子,渲染不同組件的目的。

基本上根組件沒(méi)什么交互要做,底部的樣式其實(shí)也可以放在全局的樣式表里巩搏。



main.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ù)

????// 引入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)用 <chart></chart>

? ??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)短的不需要單獨(dú)引入的修改

????// 在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: '<App/>' ,

????????router,

????????store,

????????components: { App }

????})



assets: 放置靜態(tài)資源,包括公共的 css 文件蔗包、 js 文件调限、iconfont 字體文件、img 圖片文件以及其他資源類文件耻矮。

結(jié)構(gòu)如下:


assets

css 文件夾里會(huì)有重置 css 樣式的文件以及其他全局樣式文件裆装。

js 文件夾里放置了包含銀行字典和全國(guó)省市的字典文件,在組件里引用之后遍歷獲取數(shù)據(jù)勾扭。



components: 放置通用模塊組件铁瞒。項(xiàng)目里總會(huì)有一些復(fù)用的組件桅滋,例如彈出框身辨、發(fā)送手機(jī)驗(yàn)證碼芍碧、圖片上傳等,將它們作為通用組件定庵,避免重復(fù)工作踪危;

結(jié)構(gòu)如下:


components

可以根據(jù)功能模塊建立文件夾贞远,放置本功能會(huì)用到的通用組件。例如 login 文件夾里可以放置注冊(cè)蓝仲、登錄、重置密碼這幾個(gè)功能會(huì)用的共同模塊文件(賬號(hào)亮隙、密碼垢夹、圖形驗(yàn)證碼、短信驗(yàn)證碼)煤裙; account-center 文件夾放置修改賬號(hào)相關(guān)的模塊噪漾。

全局通用的公共模塊可以不需要建立文件夾。



http: 放置與后臺(tái) api 相關(guān)的文件题翰。這里面有 axios 庫(kù)的實(shí)例配置文件诈胜、使用配置的 axios 實(shí)例接入 api 獲取數(shù)據(jù)的函數(shù)的集合的文件;

結(jié)構(gòu)如下:


http

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ì)象的文件。例子如下:


AjaxApi



mixins: 放置混合選項(xiàng)的文件搅荞。具體來(lái)說(shuō)框咙,相當(dāng)于是公用函數(shù)的集合,在組件中引用時(shí)茉贡,可以作用于組件而不必書寫重復(fù)的方法

實(shí)際上相當(dāng)于是沒(méi)有 <template/> 和 <style/> 的組件者铜,例子如下:


mixins



pages: 放置主要頁(yè)面的組件。例如登錄頁(yè)愉粤、用戶信息頁(yè)等拿撩。通常是這里的組件本身寫入一些結(jié)構(gòu),再引入通用模塊組件头滔,形成完整的頁(yè)面

這里面就是會(huì)被插入根組件的 <router-view/> 節(jié)點(diǎn)里的文件,根據(jù)路由變化坤检,根組件渲染不同的文件早歇。



router: 放置路由設(shè)置文件讨勤,指定路由對(duì)應(yīng)的組件

結(jié)構(gòu)如下:

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: 放置 vuex 需要的狀態(tài)關(guān)聯(lián)文件屉来,設(shè)置公共的 state狈癞、mutations 等

結(jié)構(gòu)如下:


store

根據(jù)需要蝶桶,可以加上 getter.js 或者將 store 分割成 modules , 在每個(gè) modules 文件夾里創(chuàng)建對(duì)應(yīng)的 js 文件真竖。



下次會(huì)總結(jié)項(xiàng)目里的到的經(jīng)驗(yàn),怎樣解決問(wèn)題之類的战秋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末获询,一起剝皮案震驚了整個(gè)濱河市拐袜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹬铺,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秋泄,死亡現(xiàn)場(chǎng)離奇詭異恒序,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)歧胁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門喊巍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人崭参,你說(shuō)我怎么就攤上這事『文海” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵砍聊,是天一觀的道長(zhǎng)贰军。 經(jīng)常有香客問(wèn)我,道長(zhǎng)俯树,這世上最難降的妖魔是什么贰盗? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任舵盈,我火速辦了婚禮,結(jié)果婚禮上秽晚,老公的妹妹穿的比我還像新娘。我一直安慰自己菩浙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布陆淀。 她就那樣靜靜地躺著先嬉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浸剩。 梳的紋絲不亂的頭發(fā)上鳄袍,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天吏恭,我揣著相機(jī)與錄音,去河邊找鬼哀九。 笑死搅幅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的息裸。 我是一名探鬼主播沪编,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼访圃!你這毒婦竟也來(lái)了相嵌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤批糟,失蹤者是張志新(化名)和其女友劉穎捏雌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纬傲,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年算墨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汁雷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挖藏,死狀恐怖膜眠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宵膨,我是刑警寧澤炸宵,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站捎琐,受9級(jí)特大地震影響涯曲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拨黔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一绰沥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧零截,春花似錦秃臣、人聲如沸哪工。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)偎捎。三九已至序攘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間程奠,已是汗流浹背瞄沙。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遂铡。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伪货,于是被迫代替她去往敵國(guó)和親钾怔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 少時(shí)遠(yuǎn)游心倉(cāng)促 風(fēng)撼浪涌無(wú)回路 回首渺茫跡無(wú)數(shù) 身影兩雙亦相顧
    一樹山閱讀 196評(píng)論 0 1
  • 風(fēng)有些大 雨也不見停 夜深了 你來(lái)了 你總來(lái)我的夢(mèng)里 夢(mèng)里總有你 突然驚醒 原來(lái)是夢(mèng) 現(xiàn)在外面風(fēng)很大 被子里很冷 ...
    仙妒芮菈閱讀 196評(píng)論 1 0
  • 文/創(chuàng)意家居研發(fā)生產(chǎn)廠家紐比家居熊山村 看了最短小說(shuō)《誰(shuí)“病”的不輕》察皇,我苦苦的笑了: 一位小伙騎車上...
    山村熊閱讀 477評(píng)論 0 1