Vue(options)中,options包含五類屬性css
el - 掛載點html
new Vue({ el:'#app' })
new Vue().$mount('#app')
data - 內部數據vue
methods - 方法node
components - 組件es6
用法:api
import Cpn form './Cpn.vue' ... new Vue({ components:{ Abc: Cpn } template:` <abc/> ` ... })
組件的其餘引入方法:數組
頁面內建立組件:緩存
//第一個參數爲組件名,第二個參數是vue實例中的options Vue.component("Abc",{ template: "<div>n</div>" ... })
前兩種的結合app
new Vue({ components:{ Abc:{ template:``, methods:{} ... } } })
生命鉤子:框架
created(){...}
實例出如今內存中時調用mounted(){...}
//實例出如今頁面中時調用updated(){...}
//實例數據更新時調用destroyed(){...}
//實例被銷燬時調用使用方法:
//Demo組件內: export default{ props:['counter'] //也能夠傳回調函數 } //main.js內: template:` <Demo counter="1" /> `
注意:若是想給自定義組件的屬性賦值變量,須要前邊加冒號「:
」。例如:
//main.js內 ... data:{ n: 5 } template:`<Demo :counter:"n" />`
computed - 計算屬性
語法:
data:{ firstName:'Oliver', lastName:'Young' } computed:{ //至關於只有get方法 Name(){ return this.firstName+this.lastName } }
computed:{ Name:{ get(){ return this.firstName+this.lastName } set(value){ this.firstName=value } } }
優勢:
簡化代碼,避免重複,方便修改 自帶緩存功能:若是依賴的屬性沒有變化,則不會從新計算
watch - 偵聽
語法:
1. ``` watch:{ o1: function(newVal,oldVal){}, //newVal和oldVal是Vue傳給你用的 o2(){}, //es6語法 o3:[f1,f2] //依次執行f1,f2 o4:{ handler(){//處理函數}, deep: true/false, //見下方解釋 immediate: true/false //第一次是否執行 }, o5: 'callbackName', //回調函數,寫在methods裏 "obj.a": function(){} //偵聽obj的屬性 } ``` 2. `vm.$watch('obj',fun,{deep:true})`
什麼叫「變化」?
obj:{num:1}
,從新賦值爲obj:{num}:1
,分配了新的內存,因此變了。computed V.S watch
computed:
()
watch:
immediate:第一次渲染時,是否監聽
template
三種寫法
寫在HTML裏(vue完整版)
//index.html <div id="app" @click="add">{{n}}</div> //main.js const vm = new Vue({ el:'#app', data(){ return{ n:0 }}, methods:{ add(){ this.n+=1 } } })
寫在options裏(vue完整版)
//index.html <div id="app></div> //main.js const vm = new Vue({ el:'#app', template:` <div> {{n}} <button @click="add">+1</button> </div> `, data(){ return{ n:0 } }, methods:{ add(){ this.n+=1 } } })
配合.vue文件(vue運行時版)
//Demo.vue <template> <div> {{n}} <button @click="add">+1</button> </div> </template> <script> export default { data(){ return{ n:0 } }, methods:{ add(){...} } } </script> <style> //這裏寫css </style> //index.html <div id="app"></div> //main.js import Demo from './Demo' new Vue({ render: h => h(Demo) }).$mount('#app')
template 模板語法
表達式 — {{ }}
綁定屬性 — v-bind:
當標籤的屬性須要使用data域中的數據時,有兩種寫法。例子以下:
data:{ className:'red' } ... <div :class="className"> //或 <div v-bind:class="className">
樣式綁定 — :style
data:{ fontsize: 16, top: 10 } <div :style="{fontSize: fontsize+'px', 'padding-top': top+'px'}">
綁定事件 — v-on:
<button v-on:click="add">+1</button>
<button v-on:click="n+=1">n+1</button>
<button @click="n+=1">+1</button>
條件判斷 — v-if
<div v-if="x>0">x大於0</div> <div v-else-if="x===0">x等於0</div> <div v-else>x小於0</div>
用法顯而易見,很好理解
循環 — v-for
for(value,key) in 對象 / for (item,index) in 數組
<ul> <li v-for="(item,index) in arrary" :key="index"> {{index}}:{{item}} </li> </ul> <ul> <li v-for="(value,key) in arrary" :key="key"> {{key}}:{{value}} </li> </ul>
:key="index"
會有bug,最好不要用index看成key顯示/隱藏 — v-show
<div v-show="n%2==0"> n是偶數 </div>
<div :style={display: n%2==0? 'block':'none' }> n是偶數 </div>
修飾符
v-on:{.keyCode| .keyAlias} .prevent, .stop 等等
<input @keypress.13="fn" />
:用戶鍵盤輸入回車時,調用fn<input @keypress.enter="fn" />
:輸入回車,調用fn<a @click.prevent="fn"></a>
:阻止默認事件<a @click.stop="fn"></a>
:中止事件冒泡v-bind: .sync 等等
directives - 指令
v-on
, v-for
, v-if
等等v-xxx
兩種寫法:
Vue.directive('x',directiveOptions)
聲明一個局部指令
new Vue({ ... directives:{ "x":directiveOptions } })
directiveOptions裏有哪些屬性?
指令的做用:
mixins - 混入
寫法
//demo.js內 const demo = { data(){ return { a:0, ...//其餘公共屬性 } } methods:{ add(a){ return a+1 } ...//其餘公共方法 } } //組件Demo1內 <script> import demo from "./demo.js" export default{ mixin:[demo] } </script> //組件Demo2內 <script> import demo from "./demo.js" export default{ mixin:[demo] } </script>
做用:
extends - 繼承
provide/inject - 提供/注入
未完待續.