vue-cli 開發 (vue 開發筆記)

vue-cli學習資料:php

http://m.php.cn/article/394750.html  或css

http://www.javashuo.com/article/p-exmcbynj-bt.htmlhtml

vue-cli 實踐案例 :  https://blog.csdn.net/yuanyuanispeak/article/details/73530523前端

一、組件的data必須是函數 :  vue官網規定的vue

二、es6拓展的對象功能:經過省略冒號與 function 關鍵字,將這個語法變得更簡潔。node

  a、對象 鍵值對的值必須是變量名且和鍵名相同纔可使用這種簡寫。react

  b、函數均可以,由於對象中的函數要麼是函數名,要麼是匿名函數。jquery

import FooterNav from '../../components/footer.vue'

export default {
    components:{
        FooterNav
    }
}

三、import OO from XX        參考: http://m.php.cn/article/394750.htmlwebpack

  a、import至關於var、let去聲明一個變量OO(自定義,解構賦值均可以)ios

  b、from:引入哪一個文件  

    .若是是本身定義的文件,必定要寫相對路徑‘./' (若是是用的本身配置的路徑別名,就只能看build目錄下的配置文件了。參考:http://www.javashuo.com/article/p-vpxufrwk-hc.html
    .若是引入node——modules下的文件不須要寫

    

  import 變量 from ‘模塊路徑
  c、此時OO返回一個對象

  d、Vue中import from的來源  : http://www.javashuo.com/article/p-pyenquzg-mp.html ( import後面的 路徑 指向)

  4.若是但願對象中有內容,須要XX先暴露出對象,這樣OO才能接收到並在當前文件使用。根據暴露對象的格式,決定接手變量的格式

export default {
    components:{
        FooterNav
    }
}

四、父組件傳值到子組件:   http://www.javashuo.com/article/p-xhqyxikg-ee.html  或  https://www.jianshu.com/p/91416e11f012  ($ref 方法能夠實現,可是不推薦 )

  父組件要把值傳遞給子組件,只能在使用子組件時,做爲標籤(自定義的組件標籤)屬性傳遞過去。

// 父組件
<
template> <div> <child message="hello"></child> // 這裏的屬性值一樣可使用vue的數據動態綁定,v-bind:message 或 :message </div> </template> <script> import child from '../../components/footer.vue' export default { components:{ child } } </script>

  子組件使用父組件傳遞過來的值必須使用 props去接收傳來的數據。

// footer.vue 子組件
<
template> <div class="footer fixed"> <div>{{ message }}</div> </div> </template> <script> export default { props:['message'] } </script>

五、子組件傳值到父組件:

  a、在子組件中建立一個按鈕,給按鈕綁定一個點擊事件

  b、在響應該點擊事件的函數中使用$emit來觸發一個自定義事件,並傳遞一個參數

  c、在父組件中 對應子組件標籤中 綁定 監聽該自定義事件,並添加一個響應該事件的處理方法。(注意,必須在對應的子組件標籤上綁定自定義的事件纔有效)

  參考 : http://www.javashuo.com/article/p-xhqyxikg-ee.html

六、動態組件 :  http://www.javashuo.com/article/p-xttgfdix-bs.html

<component :is="currentView"></component>

七、Vue2.0經過二級路由 (嵌套路由) 實現頁面切換 : https://blog.csdn.net/Fabulous1111/article/details/78859203 或 http://www.php.cn/js-tutorial-401363.html

   二級路由 相對於 普通路由是解決什麼問題的呢?

  注意:子路由 是嵌套路由,二級路由只能嵌套在一級路由中使用。

八、vue插件全局都用(toastc插件 示例):https://www.jb51.net/article/121120.htm  或  https://blog.csdn.net/qq_34802010/article/details/81668692(推薦,親測有效)

    感悟:vue組件:在使用的地方 要 引入 這個vue 文件。 vue 插件:顯示的ui放在一個vue文件中,vue插件須要一個js文件進行使用處理的。main.js只要加載這個js文件。

 九、<router-view> 組件的做用 :https://blog.csdn.net/webbingandkami/article/details/79331405

  說明:router-view 組件的做用    就是將每一個路徑映射到對應的組件(vue.js 教程的pdf文件中 對vue-router 的做用就是這樣介紹的)

  體會:我的理解,就是解析  地址欄上的 url,將對應的組件放在 router-view 上渲染(這裏多個router-view組件,就會多個進行渲染)。

     利用這個特性,能夠 控制 須要 keep-alive 的組件進行, 區別 放在router-view 中。(github中的 vue2-elm項目就是這麼處理的)

十、路由配置 中 meta字段(元數據)的做用:https://www.jianshu.com/p/33c9e7454028  或  http://m.hangge.com/news/cache/detail_2130.html

  簡單理解,就是給對應的路由添加一些信息(狀態),對應這個url地址的頁面,能夠是獲取到這些信息的(狀態)。

{
  path: '/msite',
  component: msite,
  meta: { keepAlive: true },
},
<router-view v-if="$route.meta.keepAlive"></router-view> <!-- 頁面中獲取路由 meta中keepAlive字段的信息 -->

十一、vue的  組件、自定義事件名的 命名規範 : http://www.javashuo.com/article/p-qcdmlalc-mz.html(組件名) 或 https://blog.csdn.net/zgpeterliu/article/details/80363445

  留言:目前 單文件的組件中 沒有出現過 由於沒有嚴格按照命名規範出現的問題。暫時無論這個。

十二、v-for循環列表中,還有一種    v-for="n in 10"   的循環用法。  n 由原來的 0 ~ 9 迭代變成 1 ~ 10 迭代。

1三、vue數據操做DOM,數據的變化不會立刻引發DOM的變化。因此須要DOM渲染出來後,再操做的DOM的邏輯,要放到 this.$nextTick()回調中執行。https://cn.vuejs.org/v2/api/#vm-nextTick    以下:

<img v-if="voiceCancel" src="./img/voice.png" alt="" ref="voiceImg">    <!-- voiceCancel起始爲false -->
<button @click="voiceSerch">點擊</button>
    voiceSerch(){
      this.voiceCancel = true  // voiceCancel 初始爲false
      console.log(this.$refs.voiceImg);  // undefinde,這裏雖然 voiceCancel爲true了,可是html尚未渲染出來,因此是獲取不到這個dom對象的
    }

這裏獲取 img 的DOM對象要放到 this.$nextTick()回調中,即

    voiceSerch(){
      this.voiceCancel = true  
      this.$nextTick(function(){
      console.log(this.$refs.voiceImg);  // 這裏DOM已經渲染好了,因此能夠獲取到 img 對象
      });
    }

 

 


 一、後綴名爲vue的文件的開發: https://www.jb51.net/article/123994.htm

二、路由 步驟:(注意路由中的組件 和 重複使用的組件的區別)

  a、組件頁面開發好

  b、將這個組件配置到路由表中  src/router/index.js;   先引入  import。。。;     再放入路由表中。

  

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import test from '@/components/test'

 Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld   
    },
    {
      path: '/test',    // 這個值決定訪問該頁面時url後面的hash值。如 : http://localhost:8080/#/test
      name: 'test',    //
      component: test   // 這個值是引入文件的變量即 import 後面的變量名
} ] })

三、路由與頁面間導航  :  https://www.jianshu.com/p/bc923ec4d28b

  a、<router-link :to="{ name : 'explorer' }">  和 <router-link :to="/explorer"> 的區別是前一個是以路由的name做爲參數,後一個是以path屬性做爲參數。

  b、動態路由: (須要好好研究下

四、vue同級能夠有多個router-view視圖  :  https://blog.csdn.net/qq_34664239/article/details/79639459

const router = new VueRouter({
  routes: [
    {
      path: '/',
      components: {
        default: Foo,
        a: Bar,
        b: Baz
      }
    }
  ]
})

三、Vue.js中使用require,import   :   https://blog.csdn.net/Deft_MKJing/article/details/80388770

 說明:目前全部的引擎都尚未實現import,node中使用babel支持ES6,也僅僅是將ES6轉碼爲ES5再執行,import 語法會被轉碼爲require。因此目前來講import和require引入的結果是同樣的。

    可是,import可使用解構的方法導入,且只能在文件頭部使用,而require能夠在任何地方使用。

三、vue-cli 中 組件的使用(兩種方式):

  a、在main.js文件中進行全局註冊,在須要使用這個組件的地方,組件使用這個組件的標籤就能夠了。   注:  Switch.name  應該是這個組件 默認 的 標籤名,能夠設置成自定義的標籤名。

// main.js 文件
import { Switch } from 'mint-ui'; Vue.component(Switch.name, Switch);

  b、main.js 中不動,直接在須要使用的地方,引入這個組件,在 components 選項中注入這個組件。  

//  須要使用這個組件的 .vue文件中
import { Switch } from 'mint-ui' export default { name: 'order', components: { mtSwitch: Switch } }

 

四、組件傳值,參考上面的講解

五、vue-cli 中 webpack的代理使用  : http://www.javashuo.com/article/p-rmofthbt-bv.html  或 https://www.jb51.net/article/130509.htm (推薦)或  http://www.javashuo.com/article/p-robgdfsg-ch.html 

proxyTable選項是一個代理表(明確 代理服務器是後端的程序,修改 須要重啓程序)。前端有理由表,後端有也有理由表,代理也有路由表(即代理表)。

路由表上的地址都是不寫域名和端口的,通常服務器會自動把他們加上去的(嚴格的說也不是添加上去,前端中,訪問這個網頁,既然可以訪問這個網頁,天然域名端口是有的,後端也是同樣。代理服務器更是這樣,既然可以訪問代理服務器,這個域名端口天然也是有的)
  proxyTable: {
    '/api': {     // 只要在接口中看到 ‘/api‘ 會自動變成咱們設置的地址(我的以爲,這裏應該是做爲匹配請求的地址參數)  (理解:應該是自動把前面的協議、域名、端口(即host)替換成咱們設置的目標host,下面有一個重寫 關鍵字 的選項)
      target: 'http://localhost:3000',  (這裏是代理接口的位置)
      changeOrigin: true,(容許跨域,若是這不寫,調用接口接口時會有跨域錯誤說缺乏請求頭)
      pathRewrite: {
        '^/api': ''  // 由於在 ajax 的 url 中加了前綴 '/api',而本來的接口是沒有這個前綴的,因此須要經過 pathRewrite 來重寫地址,將前綴 '/api' 轉爲 '/'或''
      }   
    }
  }

 // (我的)注意:上面的看到
‘/api‘ 會自動變成咱們設置的地址,這個api是絕對路徑,服務器地址端口/api(如:http://localhost:9090/api,這點全部的教程裏都沒有明確的說出來)。
         即將 http://localhost:9090/api 變成 http://localhost:3000/api。這裏只是將域名端口替換。下面的重寫選項,將api再去掉,而後發送請求接口。
 

npm run dev啓動webpack時,命令行中會把對應的代理對應關係顯示出來

六、proxy的代理、抓包:https://blog.csdn.net/a0405221/article/details/85234149 或 http://www.javashuo.com/article/p-uekyinqo-db.html(onProxyReq 請求發送前觸發的事件;onProxyRes 請求響應後觸發的事件)

  爲何使用這個: webpack是沒有日誌的,代理某個API接口時,若是調用失敗(postman上調用目標接口是有效的)。則沒法確認代理後請求的目標地址url是否是正確的,很難排除錯誤緣由。

   可是 經過 onProxyRes 事件就能夠知道,當前 ajax請求有沒有觸發這個代理請求,若是觸發了代理請求,能夠知道代理後目標服務器的url和請求參數; 若是沒有觸發請求這個代理請求,要麼是沒有匹配到代理的字段,要麼是被其餘的代理字段先匹配到了,

  好比兩個匹配字段 "/api" 和 "/apireq",若是代理的字段是apireq,則會被api這個字段給代理了,觸發了 "/api" 的代理事件,但沒有觸發"/apireq"的代理事件。(親測 有效)

 proxyTable: {
      '/api1': {
        target: 'https://test.iconntech.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api1': '/'
        },
        onProxyReq: function(onProxyReq, req, res) { // req和res分別是Express框架封裝的Request對象和Response對象

          console.log('代理字段', '/api1');
          console.log('前端請求url', onProxyReq._headers.origin + req.originalUrl);  // 這裏的輸出是本身配的,僅作參考
          console.log('目標請求url1', onProxyReq.agent.protocol +"//" + onProxyReq._headers.host + req.url); // 代理配置的target只有host,沒有後面的目錄
          console.log('目標請求url2', onProxyReq.agent.protocol +"//" + onProxyReq._headers.host + onProxyReq.path); // 代理配置的target,有二級目錄
        },
        onProxyRes: function(){
          console.log('2');
        }
      }
    }

七、對組件的擴展 —插槽   slot : https://blog.csdn.net/zhouzuoluo/article/details/80536754

     通俗理解:   是「佔坑」,在組件模板中佔好了位置,當使用該組件標籤時候,組件標籤裏面的內容就會自動填坑

八、vue中的ref做用 :  能夠實現DOM的聯動操做   

  a、ref 加在普通的元素上,用this.$refs.name 獲取到的是dom元素 ,減小獲取dom節點的消耗     參考 : http://www.javashuo.com/article/p-aknbdnxw-gr.html

  b、ref 加在子組件上,用this.ref.name 獲取到的是組件實例,可使用組件的全部方法    參考 : http://www.javashuo.com/article/p-nbgfgewl-cn.html

 

九、Vue.use  : https://www.jianshu.com/p/89a05706917a

十、vue插件:(如  vue-touch)  https://cn.vuejs.org/v2/guide/plugins.html

  a、開發插件  : Vue.js 的插件應當有一個公開方法 install

  b、使用插件  : 經過全局方法 Vue.use() 使用插件

       注:Vue.js 官方提供的一些插件 (例如 vue-router) 在檢測到 Vue 是可訪問的全局變量時會自動調用 Vue.use()。這樣的插件就不用 使用Vue.use()了。

十一、使用 vue-cli + axios 配置代理進行跨域訪問數據  :  http://www.javashuo.com/article/p-zhyjhxvs-nd.html

  

  注意:在vue-cli 中使用 axios,用多中方法,很差的使用方法會帶來維護修改的麻煩。  推薦使用 連接中的第三種方法 http://www.javashuo.com/article/p-vevvysqw-cr.html

   即把調 api接口的js都寫在一個API文件夾中的js文件中。

十二、vue實例中template: '<App/>',這樣寫是什麼意思  :  https://segmentfault.com/q/1010000008863503

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'    //  template 的內容會替換 el 選項中對應的標籤的。 能夠參考 vue官網 https://cn.vuejs.org/v2/api/#template
 })

1三、import { render }  和   import ReactDOM有何區別  :  https://segmentfault.com/q/1010000011795996

import ReactDOM from 'react-dom';
ReactDOM.render()                   // 這種方法是整個都引進來了
import { render } from 'react-dom'
render()                           // 這種方法是隻引進一個方法,而後解構使用

   使用ES6模塊化的import特性時,如何正確使用花括號'{ }'    :   https://www.jianshu.com/p/8c91d6cb59e8

1四、vue-router懶加載  :  https://blog.csdn.net/wp_boom/article/details/78799237

1五、vue-cli 構建的項目中如何使用 Less  :  https://blog.csdn.net/zmhawk/article/details/75209161 或  vue-cli構建項目使用 less

  說明:是用哪一個vue-cli搭建的環境,不須要配置,把兩個npm包安裝好,就能夠直接使用了。

1六、eslint語法規範   :  http://www.cnblogs.com/mingjian/p/9361027.html

1七、Vue中的computed屬性   :  http://www.javashuo.com/article/p-yhhnpwxj-cu.html

1八、<router-link :to=" " replace></router-link> 

  a、 replace的做用   :  http://www.javashuo.com/article/p-thhvvskm-gx.html

1八、vue eslint開發 關掉 tab錯誤提示  :  https://blog.csdn.net/aimee1608/article/details/81045362 (親測有效)

20、ES6 Promise 用法   :  http://www.javashuo.com/article/p-dzadmxti-md.html    或   

   https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise (這裏有代碼演示)

   a、Promise.resolve(value) 把value值解析成 Promise對象返回,而這個value值做爲這個Promise對象回調函數的參數傳入

var promise1 = Promise.resolve([1, 2, 3]);

promise1.then(function(value) {
  console.log(value);     // 輸出 Array [1, 2, 3]
});

 

2一、爲何要使用 vuex  :  https://blog.csdn.net/chjj0904/article/details/78753153

  我的理解 : vuex  就像一個本地存儲,主要是解決 組件通訊 比較複雜時的問題,好比多層組件數據傳遞,不用vuex則必須一級一級的傳遞過去比較麻煩。

  親測 :vuex 的功能 有點像 緩存(本地存儲),可是vuex的存儲很是容易管理,很是容易修改和設置。

2二、vue 中使用scoped關鍵字後樣式不能修改第三方組件問題:

  緣由 : https://www.jb51.net/article/143272.htm

  解決方案: http://www.javashuo.com/article/p-bxulqqlx-da.html

   推薦解決方案:

.gHeader /deep/ .name{ //第一種寫法
    color:red;
  }

緣由分析: style標籤中添加了scopde 屬性後,vue-loader編譯vue文件時:

  編譯 template 時會給每個標籤加上相同的自定義屬性 data-* ;

  編譯 style 會給每個選擇器(總體的一個)的後面加上這個屬性 elm[data-*]  ;

  可是第三方組件中的標籤是不會添加 這個自定義屬性 data-* 的,因此編譯後的這個選擇器 elm[data-*],在第三方的組件中找不到這樣的標籤。

上面推薦解決方案的原理:

  就是把選擇器後面的屬性去掉,放到第一基本選擇器上。以下面這樣

.gHeader[data-*] .name

2三、vue組件的is特性  :  http://www.javashuo.com/article/p-ujgsbgbe-dh.html

  做用:由於vue模板就是dom模板,使用的是瀏覽器原生的解析器進行解析,因此dom模板的限制也就成爲vue模板的限制了。

  如:ul 標籤中放入非li標籤,就會被瀏覽器踢出去(瀏覽器的容錯機制),這樣咱們在ul裏面放入組件標籤(組件標籤名確定不會是li)就會被踢出去。

    使用is屬性就是爲了解決瀏覽器容錯機制致使的組件標籤無效的問題。

  原理(我的理解): is屬性所在的標籤名,只是一個臨時佔位標籤,正在使用的是is指向的組件名。如:下面的li只是佔個位置,正在的渲染後的內容仍是v-li組件。  參考: https://blog.csdn.net/zhumengzj/article/details/79300784 (往 下面瀏覽)

<ul>
    <li is="v-li"></li>
</ul>

    這個 is 特性的做用一樣起到了 動態組件 的效果 :  http://www.javashuo.com/article/p-swwjznwd-na.html

2四、vue的路由傳參 : http://www.javashuo.com/article/p-tbkpfuwh-go.html 

2五、vue-cli 打包( npm run build )的 文件(dist目錄裏的文件),默認打包後只能在網站根目錄下運行。若是要讓它在非根目錄下運行,

  須要在config文件夾下的index.js中build選項的assetsPublicPath 配置下(親測有效)。  https://segmentfault.com/q/1010000007881269?_ea=1481207  

  或  http://www.cnblogs.com/xueweijie/p/6971146.html (vue-cli 如何打包上線)

 

2六、vue webpack打包後 .css文件裏面的背景圖片路徑錯誤解決方法 :http://www.javashuo.com/article/p-wzzdiiij-dp.html

2七、VUE配置  ip地址  訪問 :

  方法 一、2:

  https://segmentfault.com/q/1010000014797068(localhost和IP地址均可以使用,可是啓動的是0.0.0.0地址訪問的,須要本身在地址欄從新輸入有效的域名或IP地址)或  

  方法 3 :(推薦這個IP地址能夠是動態變化的 

  https://blog.csdn.net/m0_37036014/article/details/79639788 (缺點就是 localhost訪問無效,可是在ip能夠的時候,localhost根本不須要使用,因此不影響

2八、vue-cli按需加載,懶加載組件  :http://www.javashuo.com/article/p-ekxcvoip-dr.html

2九、vuejs項目性能優化總結 :https://www.jianshu.com/p/41075f1f5297

30、VUE路由去除#問題  : http://www.javashuo.com/article/p-kslzqjrh-ed.html

3一、vue-cli 中 img 圖片動態改變 :https://blog.csdn.net/qq_33744228/article/details/81319485

   vue-cli中js 動態改變img標籤的src 屬性值,並不能使這個圖片打包進入編譯後的文件中。由於webpack只是把這個src值做爲字符串處理了,而不是模塊依賴文件。

  要使用這個動態圖片,須要把這個圖片經過模塊依賴關係,加載進來

this.leftImg = require('../../assets/img/iconApply.png')

  另:img標籤中src第一次的加載進來的文件是有模塊依賴關係的,會被打包進去。以後src改變,只是將對應的src值放進去,而不會將對應的文件打包進去。

3二、項目下的 static 文件夾的文件,不會被Webpack處理,會直接被複制到最終的打包目錄(默認是dist/static)下。  https://blog.csdn.net/z767327552/article/details/79533792

3三、vue-cli中接口的地址,開發時,使用的是代理的地址,打包後是使用實際的地址。配置以下。

// 配置地址
export const SMQB_BASE_URL = process.env.NODE_ENV === 'development' ? '/api1/' : 'http://10.100.13.202:9107/'

3四、vue 路由守衛:http://www.javashuo.com/article/p-ziahhjmu-eh.html 

   路由的改變首次進入就會執行裏面的函數,調用next()方法,頁面纔會跳到對應路由的頁面進去。

// 全局路由守衛
router.beforeEach((to, from, next) => {
  console.log('守衛')
  next() // 必須使用 next ,執行效果依賴 next 方法的調用參數
})

 

es6 關聯知識:

一、export用於對外輸出本模塊(一個文件能夠理解爲一個模塊)變量的接口

   import用於在一個模塊中加載另外一個含有export接口的模塊。

參考  :  http://www.javashuo.com/article/p-pjzwxlya-em.html

二、npm run dev 自動打開瀏覽器  :  http://www.javashuo.com/article/p-wdmsyetv-eo.html

修改配置:

config - index.js - autoOpenBrowser: true

三、使用組件時注意,再html中使用的組件名,再js中組件名必須駝峯命名法。參考: (vue-cli練習案例)   https://blog.csdn.net/yuanyuanispeak/article/details/73530523  或 

                 https://github.com/hyy1115/vue2-web (redme.md中有教程,這個是用webpack本身搭建的開發環境)

四、mock.js 實現假數據  http://mockjs.com/    或  http://www.javashuo.com/article/p-scfiwdwr-er.html  或  http://www.javashuo.com/article/p-qgzgahlf-es.html (推薦,非框架中使用,親測可行)

  注意:mockjs再html文件(即傳統的js開發)中也是可使用的。

<!DOCTYPE html>
<html lang="en">
<body>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script src="./mock.js"></script>
    <script>
        var arr = ['momo', 'yanzi', 'ziwei']
        var obj = {
            'host': 'www.baidu',
            'port': '12345',
            'node': 'selector'
        }
        Mock.mock('http://www.bai.com', obj)

        $.ajax({
            url: 'http://www.bai.com',
            dataType: 'json',
            success: function (e) {
                console.log(e)
            }
        })
    </script>
</body>
</html>
View Code

五、vue2.0 類淘寶不一樣屏幕適配及px與rem轉換問題  : http://www.javashuo.com/article/p-qcrquqda-eo.html  或  https://blog.csdn.net/qq_33485463/article/details/80454326

六、ES6模塊之export和import詳解  : http://www.javashuo.com/article/p-kkqsnjfa-ba.html

 

http://www.cnblogs.com/zhuzhenwei918/p/6870340.html?utm_source=itdadao&utm_medium=referral

相關文章
相關標籤/搜索