前端項(xiàng)目開發(fā)<Vue>

一、項(xiàng)目開發(fā)配置

1宴杀、項(xiàng)目搭建

1.1癣朗、項(xiàng)目安裝:
1.2、項(xiàng)目結(jié)構(gòu):

2旺罢、框架引入:

2.1旷余、css相關(guān):
  • reset.css :重置頁(yè)面的樣式。統(tǒng)一項(xiàng)目在各瀏覽器的默認(rèn)樣式保持一致扁达。點(diǎn)擊進(jìn)入下載 reset.css正卧。

  • border.css:實(shí)現(xiàn)1px邊框。點(diǎn)擊進(jìn)入下載 borde.css
    參考:方案一跪解; 方案二

  • fastclick:移動(dòng)端300ms點(diǎn)擊延遲問題炉旷,在某些機(jī)型和瀏覽器上,點(diǎn)擊事件會(huì)有300ms的延遲。
    參考:http://www.reibang.com/p/16d3e4f9b2a9
    在vue項(xiàng)目中的使用方式:

      npm install fastclick --save
    
2.2窘行、圖標(biāo)樣式:
2.3饥追、輪播圖框架:
  • vue-awesome-swiper
    參考:鏈接一
    使用:
      //這里使用@的意思為安裝指定的版本
      npm install vue-awesome-swiper@v2.6.7 --save
    
2.4、插件:
  • better-scroll :移動(dòng)端滾動(dòng)插件解決移動(dòng)端各種滾動(dòng)場(chǎng)景需求的開源插件罐盔,適用于滾動(dòng)列表但绕、選擇器、輪播圖惶看、索引列表捏顺、開屏引導(dǎo)等應(yīng)用場(chǎng)景。點(diǎn)擊進(jìn)入下載 better-scroll
    使用:
      //html
      <div class="wrapper" ref=“wrapper”>
        <ul class="content">
          <li>...</li>
          <li>...</li>
          ...
        </ul>
      <!-- you can put some other DOMs here, it won't affect the scrolling -->
      </div>
    
       //js
      import BScroll from 'better-scroll'
      const wrapper = document.querySelector('.wrapper')
      const scroll = new BScroll(wrapper)
    
      //或者:
      import BScroll from 'better-scroll'
      const scroll = new BScroll('.wrapper')
    
    注:在vue中纬黎,可以通過在元素上添加ref的語(yǔ)法來獲取
      const scroll = new BScroll(this.$refs.wrapper)  //wrapper為自定義的名字幅骄,元素上ref中的值
    

二、項(xiàng)目開發(fā)代碼

1莹桅、代碼技巧

1.1昌执、簡(jiǎn)寫導(dǎo)入目錄:

說明:在項(xiàng)目開發(fā)中,在一個(gè)js或css文件中如果導(dǎo)入其他目錄下的相關(guān)文件诈泼,就需要通過如下方式,
示例:

<style>
    @import url('../../assets/style/fontStyle.css');
</style>

但如果每次都導(dǎo)入同一目錄下的文件懂拾,會(huì)比較麻煩,就可以通過設(shè)置簡(jiǎn)寫路徑達(dá)到同樣的導(dǎo)入效果
配置方法如下铐达,其中key值為自定義的簡(jiǎn)寫名稱(如stylePath)岖赋,value值為配置的路徑
示例:

//在{項(xiàng)目目錄}\build\webpack.dev.conf.js文件中
resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
      'stylePath': resolve('src/assets/styles'),  //在這里進(jìn)行配置簡(jiǎn)寫別名
    }
  },
//使用如下,這里使用了stylus的框架
<style lang="stylus" scoped>
    @import "~stylePath/border.styl"
</style>

2瓮孙、Vuex的使用及注意點(diǎn)

2.1唐断、Vuex的使用:
  • 顯式安裝Vuex:

      import Vue from 'vue'
      import Vuex from 'vuex'
    
      Vue.use(Vuex)
    

    注:當(dāng)使用全局 script 標(biāo)簽引用 Vuex 時(shí),不需要以上安裝過程杭抠。

  • 創(chuàng)建store:

     // 如果在模塊化構(gòu)建系統(tǒng)中脸甘,請(qǐng)確保在開頭調(diào)用了 Vue.use(Vuex)
    
     const store = new Vuex.Store({
       state: {
         count: 0
       },
       mutations: {
         increment (state) {
           state.count++
         }
       }
     })
    
       //觸發(fā)狀態(tài)變更
      //commit可接收多個(gè)參數(shù),第一個(gè)參數(shù)(如increment)為方法名偏灿,第二個(gè)及之后的參數(shù)為方法(如increment)中接收的參數(shù)
       store.commit('increment') 
    
       console.log(store.state.count) // -> 1
    
  • 注入store:
    Vuex 通過 store 選項(xiàng)丹诀,提供了一種機(jī)制將狀態(tài)從根組件“注入”到每一個(gè)子組件中(需調(diào)用 Vue.use(Vuex))

        const app = new Vue({
           el: '#app',
           // 把 store 對(duì)象提供給 “store” 選項(xiàng),這可以把 store 的實(shí)例注入所有的子組件
           store,
           components: { Counter },
           template: `
            <div class="app">
              <counter></counter>
            </div>
            `
         })
    

3翁垂、router-link 的使用技巧

3.1铆遭、使用:

在需要跳轉(zhuǎn)的元素外包裹一層<router-link></router-link> ,使用to 語(yǔ)法即可跳轉(zhuǎn)到指定的頁(yè)面中

    <ul>
        <router-link to="/">
            <li>
                //....
            </li>
        </router-link>
    </ul>
3.2沿猜、技巧:

實(shí)際上枚荣,HTML會(huì)將router-link 渲染成<a> 標(biāo)簽
這就會(huì)導(dǎo)致被router-link 包裹的元素中的文字顯示成<a> 默認(rèn)的藍(lán)色樣式,可通過如下方式解決:

    <ul>
        <router-link
           tag="li"     
           to="/">
            //....
        </router-link>
    </ul>

使用tag將router-link 標(biāo)記為li 標(biāo)簽啼肩,這樣既保證了ul 中的子元素為li 橄妆,又保證了html在渲染的時(shí)候衙伶,不會(huì)講router-link 渲染為a 標(biāo)簽

4、頁(yè)面數(shù)據(jù)的緩存

4.1呼畸、使用:keep-alive

如果某一頁(yè)面多次被訪問痕支,并且其中的數(shù)據(jù)基本保持不變,則可以使用頁(yè)面緩存的技術(shù):

    <keep-alive>
        <router-view/>
    </keep-alive>

注:當(dāng)頁(yè)面被緩存后蛮原,生命周期鉤子mounted 方法則只會(huì)在第一次進(jìn)入的時(shí)候,執(zhí)行一次另绩,就不會(huì)再執(zhí)行了儒陨。但生命周期鉤子方法activated 方法會(huì)每次調(diào)用

4.2、緩存數(shù)據(jù)的刷新:

但如果頁(yè)面的數(shù)據(jù)根據(jù)傳過來的參數(shù)來判定是否需要緩存和刷新數(shù)據(jù)笋籽,則可以通過生命周期的鉤子activated 來實(shí)現(xiàn)數(shù)據(jù)的刷新

        mounted: {
            //首次進(jìn)入蹦漠,刷新數(shù)據(jù)
        },
        activated: {
            //再次進(jìn)入,根據(jù)傳入?yún)?shù)判斷是否需要再次刷新數(shù)據(jù)
            if(lastFlag===this.flag) {
                //重新刷新數(shù)據(jù)
            }
        }
4.3车海、隔離某些頁(yè)面的緩存:

如果通過keep-alive 進(jìn)行頁(yè)面的緩存笛园,會(huì)將其包裹下的路由子頁(yè)面都會(huì)被緩存,假如其中的某一子頁(yè)面不需要被緩存侍芝,則可以通過exclude 語(yǔ)法將不需要緩存的頁(yè)面隔離出去研铆,保證其每次都會(huì)重新加載請(qǐng)求:

    <keep-alive exclude="Detail">
        <router-view/>
    </keep-alive>

注:

  • 其中的Detail為指定的路由頁(yè)面,文件名稱:Detail.vue
  • 則每次進(jìn)入頁(yè)面州叠,生命周期鉤子函數(shù)mounted 都會(huì)被重新執(zhí)行

5棵红、多頁(yè)面的拖動(dòng)影響

5.1、問題說明:

當(dāng)在一個(gè)頁(yè)面拖動(dòng)到底部的某個(gè)位置的時(shí)候咧栗,再點(diǎn)擊其中的一個(gè)元素進(jìn)入到下一個(gè)頁(yè)面逆甜,則進(jìn)入的這個(gè)頁(yè)面也會(huì)被拖到相同的位置,這就造成了多頁(yè)面的拖動(dòng)影響

5.2致板、解決辦法:

在路由配置中交煞,加入一項(xiàng)scrollBescrollBehavior ,即每次進(jìn)行路由切換的時(shí)候斟或,讓頁(yè)面的初始位置為指定的x和y值

    export default new Router({
        routes: [{
            path: "/",  //根路徑
            name: "Home",   //名稱
            component: Home //組件名稱
        }, {
            path: "/city",  //指定路徑
            name: "City",
            component: City
        }
        //....
        ],
        scrollBehavior (to, from, savedPosotion) {
            return { x: 0, y:0 }
        }
    });

6素征、頁(yè)面支持IP訪問

6.1、問題說明:

前端項(xiàng)目通過webpage 啟動(dòng)的缕粹,它不支持IP的形式進(jìn)行頁(yè)面訪問稚茅,所以需要修改項(xiàng)目的默認(rèn)配置項(xiàng)

6.2、解決方案:

在項(xiàng)目的根目錄下的package.json文件中平斩,進(jìn)行如下配置:

"scripts": {
    "dev": "webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js",
    ......
  },

注:主頁(yè)增加了--host 0.0.0.0

7亚享、兼容性問題

7.1、問題說明:

在某些瀏覽器和手機(jī)上不支持一些es6和vue的新特性绘面,就會(huì)出現(xiàn)兼容性的問題

7.1欺税、解決方案:

通過使用第三方框架庫(kù)babel-polyfill來解決兼容性問題

  • 安裝:
    npm install babel-polyfill --save
  • 使用:
    重啟姓名服務(wù)器侈沪,在項(xiàng)目中直接引入代碼即可
       import "babel-polyfill"
    

參考文章:https://blog.csdn.net/crazyfeeling/article/details/70241285

8、項(xiàng)目打包上線

  • 路徑配置:
    如果需要將打包好的文件放到指定的目錄中進(jìn)行訪問晚凿,則需要進(jìn)行相應(yīng)的配置:
    找到index.js文件亭罪,在build配置項(xiàng)中,進(jìn)行如下配置:

      build: {
        ......
        assetsPublicPath: '/project',
        ......
      {
    

    注:其中的project就是需要配置的路徑

  • 打包編譯(build):
    npm run build
    vue腳手架工具會(huì)自動(dòng)的對(duì)src目錄下的源代碼進(jìn)行打包編譯歼秽,生產(chǎn)一個(gè)能夠被瀏覽器運(yùn)行的代碼应役,同時(shí)這套代碼也被壓縮了的。運(yùn)行之后燥筷,顯示Build complete即成功完成編譯箩祥,會(huì)生產(chǎn)一個(gè)dist目錄,此目錄即為要上線的文件

  • 部署到服務(wù)器后臺(tái)
    將打包好的文件dist中的文件放到服務(wù)器上的指定目錄中即可

9肆氓、異步組件的使用:

9.1袍祖、使用方式:
  • 常規(guī)組件的寫法:
        import HomeHeader from './components/HomeHeader.vue'
        export default {
          ......
          components: {
             HomeHeader: HomeHeader,
          }
          ......
        }
    
  • 異步組件的寫法:
        import HomeHeader from './components/HomeHeader.vue'
        export default {
            ......
            components: {
                HomeHeader: () => import('./components/HomeHeader.vue'),
            }
            ......
        }
    
9.2、注意事項(xiàng):
  • 使用異步加載可以避免一次性將數(shù)據(jù)全部加載完成谢揪,造成加載量過大
  • 只有當(dāng)項(xiàng)目很龐大蕉陋,app.js達(dá)到至少1MB以上的時(shí)候,才有必要使用異步加載組件進(jìn)行拆分

三拨扶、相關(guān)參考

1凳鬓、項(xiàng)目開發(fā)參考

1.1、集成自定義的模板腳手架:

四屈雄、相關(guān)問題

1村视、發(fā)布項(xiàng)目遇到圖片找不到情況:

1.1、問題描述:
  • 在使用npm run build進(jìn)行webpack打包后酒奶,發(fā)布的項(xiàng)目可能會(huì)遇到圖片等找不到的情況蚁孔。
1.2、解決方案:
  • “萬(wàn)能”解決辦法:
    • 將config/index.js 里面的 assetsPublicPath:'/' 改為 assetsPublicPath:'./'
    • build/util.js里面的
        if (options.extract) {
           return ExtractTextPlugin.extract({
                  use: loaders,
                  fallback: 'vue-style-loader',
                  publicPath:'/'
        })
    
    將其中的publicPath 改為:publicPath:'../../' 就可以了惋嚎。這樣打包出來的路徑就是正確的了杠氢。

說明:

  • 第一個(gè)是為了改變js中引入圖片的路徑,改為./ 就是指在當(dāng)前路徑另伍,這個(gè). 代表的路徑就是assetsRoot+assetsSubDictionary鼻百,這里定位到dist/static/ ,加上圖片前綴img摆尝,就可以找到了温艇。
  • 第二種是為了改變vue文件中使用style樣式里面例如background:url('xxx'),這樣的路徑堕汞,因?yàn)閟tyle最終變成css文件在dist/static/css 里面勺爱,我們的圖片放在dist/static/img 中,那么加上../../ 變成dist目錄下讯检,默認(rèn)的目錄前綴是static琐鲁,img是圖片默認(rè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)離奇詭異段磨,居然都是意外死亡取逾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門苹支,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人误阻,你說我怎么就攤上這事债蜜。” “怎么了究反?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵寻定,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我精耐,道長(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)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼遭殉!你這毒婦竟也來了石挂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萍悴,沒想到半個(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
  • 我被黑心中介騙來泰國(guó)打工昼浦, 沒想到剛下飛機(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)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,296評(píng)論 25 707
  • 6月18日建钥,星期天 今天是父親節(jié)藤韵,也是忙碌的一天,原本計(jì)劃下午給爸爸打個(gè)電話熊经,可從中午代理補(bǔ)貨泽艘,回訪老顧客,晚上附...
    張于閱讀 132評(píng)論 0 0
  • 又是一年七月镐依,迎來了暑假匹涮,一如既往的各科作業(yè),也隨之而來槐壳,各式各樣的作業(yè)都有然低,無(wú)論是看的書,批注的資料务唐,要錄音...
    懿靨閱讀 174評(píng)論 1 1
  • 2018年2月16日 周五 晴 大年初一脚翘,我們?cè)缭缙鸫矌е鴥鹤尤グ菽辏ɡ霞业牧?xí)俗早起去長(zhǎng)輩家里磕頭...
    肖肖109閱讀 112評(píng)論 0 0