1、MVVM層
M層:數(shù)據(jù)層
V層:視圖層
VM層:Vue(監(jiān)聽數(shù)據(jù)改變并作出映射)
2、如果要觸發(fā)原生的綁定事件而不是自定義事件,只需要加上修飾符.native,如: @click.native="testFun"
3、watch和computed計算屬性有緩存,數(shù)據(jù)沒更改時從緩存中直接調(diào)用結(jié)果
4、v-if 和 v-show的區(qū)別
v-show會渲染到頁面上,只是改變display的值,v-if為false時直接不渲染不在DOM中。
v-if和v-else-if、v-else 一起出現(xiàn)時必須緊接著寫
5、key值
Vue會嘗試復(fù)用頁面上已經(jīng)存在的DOM標(biāo)簽,加上key值可以告訴vue頁面上的標(biāo)簽是唯一的,不會復(fù)用頁面上的標(biāo)簽。
v-for的:key值盡量不要用自己的index值,可以使用數(shù)據(jù)的唯一值如item.id,此時性能較高。
6、不能根據(jù)數(shù)組下標(biāo)的方式來添加數(shù)組,數(shù)據(jù)會被改變,但頁面不會響應(yīng)同步更新。
(1)可以使用數(shù)組的push、pop、shift、unshift、splice、sort和reverse方法來對數(shù)組進行修改更新。
(2)通過改變數(shù)組的引用
(3)Vue.set方法:vm.set(target, key, value) Vue.set(vm.info, "address","beijing"); 相當(dāng)于:vm.set(vm.info, "address","beijing");
7、template模板占位符
如:
<template v-for="(item, index) in list" :key="item.id">
<div>{{item.text}}</div>
<span>{{item.id}}</span>
</template>
渲染后template標(biāo)簽不會在文檔中出現(xiàn),又可以保證里面的內(nèi)容不用寫多個v-for
8、在根組件的data可以是個對象,但在子組件中必須是一個函數(shù),需要return返回對象。
9、is特殊屬性
<div id="root">
<table>
<tbody>
<tr is="row"></tr>
<tr is="row"></tr>
</tbody>
</table>
</div>
Vue.component('row', {
template: '<tr><td>this is a row</td></tr>'
});
在使用table時,<tbody>里的標(biāo)簽必須為tr,否則會出bug,若tr以組件的形式引入,必須使用is標(biāo)簽,指明該組件指向的是row組件。相似的ul、select標(biāo)簽也可能出現(xiàn)這樣的bug。
10、子組件接收到父組件傳過來的參數(shù)后,不能直接對參數(shù)進行修改(單向數(shù)據(jù)流)。需要修改時可以將傳入的參數(shù)賦值給一個定義的變量,通過
改變變量來實現(xiàn)。
11、對于過渡動畫,可以通過 appear 特性設(shè)置節(jié)點在初始渲染的過渡:
<transition
appear
appear-class="custom-appear-class"
appear-to-class="custom-appear-to-class" (2.1.8+)
appear-active-class="custom-appear-active-class"
>
<!-- ... -->
</transition>
12、對于@keyframe和transition動畫同時使用時過渡時長不一致時,可以設(shè)置type屬性和duration。type="transition"則以transition的時長為準(zhǔn)。設(shè)置:duration="1000"或者:duration={enter: 3000, leave: 5000}則是自定義動畫時長