Vue 學習筆記

1、安裝

一、基於nodeJs環境
  安裝node設置node權限
二、基於node,利用淘寶npm鏡像安裝相關依賴
  在終端裏直接輸入:
  (1)、(2)、vue ,回車,若出現vue信息表示成功
 
三、安裝全局vue-cli 腳手架,用於幫助搭建所需模版框架
  npm install -g vue-cli , 回車等待安裝....
四、建立項目
  vue init webpack 項目名 ,回車
 
五、安裝依賴
  cd 項目名 ,回車進入到文件夾
  cnpm install ,回車等待
  項目結構裏多了一個 node_modules 文件夾(改文件裏的內容就是以前安裝的依賴)
 
六、測試環境是否搭建成功
  方法1: cnpm run dev (-port 新端口號/在config文件下的index文件下的prot字段修改成新端口號)
  方法2:在瀏覽器輸入localhost:8080 (默認端口號8080)
 

2、Vue.js 起步

 
一、語法格式以下:
    var vm=new Vue({
      //選項
    })
HTML:     <div id="app">
                <p>site:{{site}};{{url}}</p>
                <p>{{details}}</p>
            </div>

JS:     var vm=new Vue({       el:'#app',       data:{         site:'百度',         url:'www.baidu.com'       },       methods:{         details:function(){           return this.site+"查詢";         }       }     })

頁面結果:     site:百度;www.baidu.com     百度查詢 
 
  <div id="app">
    <p>site:{{site}};url:{{url}}</p>
  </div>

   var data={site:"百度"url:"www.baidu.com"}    var vm=new Vue({      el:'#app',      data:data    })    document.write(vm.$data===data) //true
   document.write("<br>");    document.writer(vm.$el===document.getElementById('app')) //true

  site:百度;url:www.baidu.com   true
  true

3、Vue.js 模版語法 

數據綁定最多見形式就是使用{{...}} (雙大括號)的文本插值:
<div id="app"><p>{{message}}</p></div>
 
一、v-html 指令
  v-html指令用於輸出html代碼:   
<div id="app">
  <div v-html="message"></div>
<div>
 
new Vue({   el:'#app',   data:{     message:"Hello Vue!"   } })

 

二、v-bind 指令
  屬性中的值應用使用v-bind 指令
  .class1{color:red;background:#444;}
  <div id="app">
    <label for="r1"></label><input id="r1" type="checkbox" v-model="class1">
    <br>
    <div v-bind:class="{'class1':class1}">文字文字</div>
  </div>
 
  new Vue({     el:'#app',     data:{       class1:false     }   });

 

三、表達式
  <div id="app">     {{ 5+5 }} <br>     {{ ok ? 'YES' : 'NO' }} <br>     {{ message.split('').reverse().join('') }} <!--字符串反轉-->
    <div v-bind:id="'list-'+id">文字信息</div>
  </div>
 
  new Vue({     el:'#app',     data:{       ok:true,       message:'ABC',       id:1     }   })
  10
  YES
  CBA
  文字信息
 
四、指令
  指令是帶有v-前綴的特殊屬性。
  指令用於在表達式的值改變時,將某些行爲應用到DOM上。
   v-if 
<div id="app"><p v-if="seen">如今你看到我了</p></div>
 
new Vue({   el:'#app',   data:{     seen:true   } })
  這裏的v-if指令將根據表達式seen的值(true或false)來決定是否插入p元素。
 
其餘v-指令:
  <a v-bind:href="url">a連接</a> <a v-on:click="doSomething">a連接</a> v-on指令,用於監聽DOM事件。
  <form v-on:submit.prevent="onSubmit"></form> 修飾符
 
五、雙向數據綁定
  在input輸入框中咱們可使用v-model指令來實現雙向數據綁定:
<div id="app">
    <p>{{ message }}</p>
    <input v-model="message">
  </div>
 
  new Vue({     el:'#app',     data:{       message:'ABC!'     }   })

 

六、過濾器
  Vue.js容許你自定義過濾器,被用做一些常見的文本格式化。由「管道符」指示  | 
  
 
七、縮寫
  v-bind 縮寫:
    v-bind:href="url" //完整寫法
    :href="url" //縮寫
  v-on 縮寫 :
    v-on:click="doSomething" //完整寫法
    @click="doSomething" //縮寫
 
 

4、條件語句和循環語句

一、v-if / v-else / v-else-if /v-show 條件語句
  
  <div id="app">
    <div v-if="type==='A'">A</div>
    <div v-else-if="type==='B'">B</div>
    <div v-else-if="type===C">C</div>
    <div v-else>Not A/B/C</div>
  </div>
 
  new Vue({     el:'#app',     data:{       type:'C'     }   })
<h1 v-show="ok">Hello!</h1>
 
二、v-for 循環語句
  
  <div id="app">
    <ol v-for="site in sites">
      <li>{{site.name}}</li>
    </ol>
  </div>
 
  new Vue({     el:'#app',     data:{       sites:[         {name:'Ling'},         {name:'Hone'},         {name:'Fei'}       ]     }   })
  結果:
    1.Ling
    2.Hong
    3.Fei
 
 三個參數索引。
  
  <div id="app">
    <ul>
      <li v-for="(value,key,index) in object">         {{index}}.{{key}}:{{value}}       </li>
    </ul>
  </div>
 
  new Vue({      el:'#app',      data:{       object:{         "name":"百度",         "url":"www.baidu.com"       }      }   })
  結果:
    1.name:百度
    2.url: www.baidu.com
 

5、Vue.js 計算屬性

一、計算屬性關鍵詞:computed。
  
  <div id="app">
    <div>原始字符串:{{message}}</div>
    <div>計算後反轉字符串:{{reversedMessage}}</div>
  </div>
 
  var vm=new Vue({     el:'#app',     data:{       message:'ABC!'     },     computed:{       reversedMessage:function(){         return this.message.split('').reverse().join('')       }     }   })
  原始字符串:ABC!
  計算後反轉字符串:!CBA
 
computed VS methods
  咱們可使用methods來替代computed,效果上兩個都是同樣的,可是computed是基於它的依賴緩存,只有相關依賴發生時纔會從新取值。而使用methods,在從新渲染的時候,函數總會從新調用執行。
  能夠說computed性能會更好,可是若是你不但願緩存,可使用methods屬性。
 
二、computed setter
  computed屬性默認只有getter,不過在須要時你也能夠提供一個setter:
  
<div id="app">
    <p>{{site}}</p>
  </div>
 
  var vm Vue({     el:'#app',     data:{       name:'Google',       url:'www.google.com'     },     computed:{       site:{         get:function(){           return this.name+' : '+this.url         },         set:function(newValue){           var names=newValue.split(' ')           this.name=names[0]           this.url=names[names.length-1]         }       }     }   })   vm.site='百度 www.baidu.com';   document.wirte("name:"+vm.name);   document.write("<br");   document.write("url:"+vm.url);
結果:
    百度 : www.baidu.com
    name:百度
    url:www.baidu.com
 
 

 6、監聽屬性

咱們能夠經過 watch 來響應數據變化:  
  <div id="app">     公里<input type="text" v-model="kilometers"><br>     米:<input type="text" v-model="meters">
   </div>
  <div id="info"></div>
 
  var vm=new Vue({     el:'#app',     data:{       kilometers:0,       meters:0     },     watch:{       kilomerts:function(val){         this.kilomerts=val;         this.meters=val*1000;       },       meters:function(val){         this.kilomerts=val/1000;
        this.meters=val;       }     }   });   //$watch 是一個實例方法。
  vm.$watch('kilomerts',function(newValue,oldValue){     document.getElementById('info').innerHTML="修改前值爲:"+oldVlaue+",修改後值爲:"+newValue;   });

 7、樣式綁定

咱們能夠用v-bind 來設置樣式屬性。
  v-bind:class設置一個對象,從而動態的切換class:
一、
<div v-bind:class="{active:isActive}"></div>
 
二、    
<div v-bind:class="{active:isActive,item:hasItem}"></div>

 

三、
  <div id="app"><p v-bind:class="objectClass"></p></div>
 
  new Vue({     el:'#app',     data:{       objectClass:{         active:true,         item:true       }     }   })

 

四、數組語法
<div v-bind:class="[isActive,hasItem]"></div>

 

五、還能夠用三元表達式切換class
<div v-bind:class="[isActive,hasItem?item:'']"></div>

 

 
 

 8、事件處理

一、v-on
  <botton v-on:click="counter+=1">增長1</button>
  <p>這個按鈕被點擊了{{counter}}次</p>
 
  new Vue({     el:'#app',     data:{       counter:0     }   })

 

9、表單

一、input和textarea元素中使用v-model實現雙向數據綁定:
  <div id="app">
    <p>input 元素:</p>
    <input v-model="message" placeholder="編輯我.....">
    <p>消息是:{{message}}</p>
 
    <p>textarea 元素:</p>
    <textarea v-model="message2" placeholder="編輯我....."></textarea>
    <p style="white-space:pre">{{message2}}</p>
  </div>
 
  new Vue({     el:'#app',     data:{       message:'Googel',       message:'谷歌 \r\n http://www.google.com'     }   })

 

二、複選框
  
  <div id="app">
    <p>單個複選框</p>
    <input type="checkbox" id="checkbox" v-model="checked">
    <label for="checkbox">{{checked}}</label>
 
    <p>多個複選框</p>
    <input type="checkbox" id="baidu" value="Baidu" v-model="checkedNames">
    <label for="baidu">百度</babel>
    <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    <label for="google">谷歌</babel>
    <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    <label for="google">淘寶</babel>
    <br>
    <span>{{checkedNames}}</span>
  </div>
 
  new Vue({     el:'#app',     data:{       checked:false,       checkedNames:[]     }   })

 

 

10、組件

組件(Component)是Vue.js最強大的功能之一。
組件能夠擴展HTML元素,封裝可重用的代碼。
 
註冊一個全局組件語法格式以下:
trgName 爲組件名,options爲配置選項。註冊後,咱們可使用如下方式來調用組件:
 
一、全局組件
  註冊一個簡單的<aaa></aaa>,並使用它:
    <div id="app"><aaa></aaa></div>     Veu.component('aaa',{       template:'<h1>自定義組件!</h1>'     })     new Vue({el:'#app'})

 

二、局部組件
  var Child={     template:'<h1>自定義組件!</h1>'   }   new Vue({     el:'#app',     data:{       'aaa':Child //<aaa>將只能在父模版可用
    }   })

 

三、動態Prop
  <div id="app">
    <input v-model="parentMsg"/>
    <br>
    <child v-bind:message="parentMsg"></child>
  </div>
   Vue.component('child',{     props:["message"],     template:'<span>{{message}}</span>'   })   new Vue({     el:'#app',     data:{       parentMsg:'父組件內容!'     }     })

 

四、自定義事件
  父組件是使用props傳遞數據給子組件,但若是子組件要把數據傳遞回去,9⃣️須要使用自定義事件!
  咱們可使用v-on綁定自定義事件,每一個Vue實例都實現了事件接口(Events interface),即:
  使用:$on(eventName)監聽事件
    $emit(eventName)觸發事件
<div id="app">
    <p>{{total}}</p>
    <counter v-on:increment="increment"></counter>
    <counter v-on:increment="increment"></counter>
  </div>
   Vue.component('counter',{     template:'<button v-on:click="incrementHandler">{{counter}}</button>',     data:function(){       return {counter:0}     },     methods:{       incrementHandler:function(){         this.counter+=1
        this.$emit('increment')       }     }   })   new Vue({     el:'#app',     data:{       total:0     },     methods:{       increment:function(){         this.total+=1       }     }   })
若是你想在某個組件的根元素上監聽一個原生事件。可使用.native 修飾 v-on .
 
 

11、自定義指令

一、頁面載入時,input元素自動獲取焦點
  <div id="app">
    <input v-focus>
  </div>
   Vue.directive('focus',{     function(el){       el.focus()     }   })   new Vue({el:'#app'})
 
二、指令參數
  <div id="app">
    <div v-lhf="{color:'red',text:'凌紅飛 😄'}"></div>
  </div>
     Vue.directive('lhf',function(el,binding){       el.innerHTML=binding.value.text       el.style.backgroundColor=binding.value.color     })     new Vue({el:'#app'})
 

12、路由

  <div id="app">
    <rooter-link to="/foo">Go To Foo</rooter-link>
    <rooter-link to="/bar">Go To Bar</rooter-link>
 
    <rooter-view></rooter-view> <!--路由渲染到這裏-->
  </div>
     // 1、定義路由組件     const Foo={template:'<div>Hello Foo</div>'}     const Bar={template:'<div>Hello Bar</div>'}     // 2、定義路由     const routes=[       {path:'/foo',component:Foo},       {path:'/bar',component:Bar}     ]     // 3、建立router實例,而後傳routers配置     const router=new VueRouter({       routes //(縮寫)至關於 routes:routes
    })     // 4、建立和掛載根實例。記得要經過router配置參數注入路由     const app=new Vue({       router     }).$mount('#app')
相關文章
相關標籤/搜索