1. 程式人生 > >vue2.0的基本特性

vue2.0的基本特性

本文目前總結的特性如下
1.偵聽屬性和計算屬性
2.class的繫結
3.條件渲染時的注意事項
4.v-if和v-for同時使用的注意事項
5.插槽
6.ref,父元件呼叫子元件的另一種方式
7.<keep-alive>標籤


偵聽屬性和計算屬性

計算屬性computed
假設有A、B兩個變數,B的值依賴於A,B=A的平方


&lt;p&gt;A的值:{{A}}&lt;/p&gt;
&lt;p&gt;A的平方:{{B}}&lt;/p&gt;
//B的值依賴於A,當A發生改變時B也會改變
computed:{
    B(){
        //這個方法在A發生改變時會觸發,返回值傳給B
        return A*A
    }
}

當計算很簡單的時候,可以直接使用{{A*A}}來代替計算屬性。
可是當計算變得邏輯變得複雜時,如果巢狀在template的表示式並不適用於這種方法,而且這樣會使程式碼的可讀性變差,難以維護
而且使用計算屬性是有快取的,只有當A發生改變時,才會再次觸發

watch偵聽屬性
watch的功能computed類似,watch的方法在監聽的屬性改變時觸發


watch:{
  A(){
    this.B = A*A;
  }
}

class的動態修改

當一個元素的樣式需要根據資料來動態改變時,使用:class屬性
<div :class="{類名:變數}"></div>,類名是否存在取決於變數值是否為真

當元素有多個樣式時:
<div :class="['類1',{'類名2':變數2}]">

類名也可以用計算屬性來監聽:
isEnoug為true,class="cartLeast unEmpty" 否則class="cartLeast"
<div :class="classObj"></div>
computed:{
classObj(){
let classArr = ['cartLeast'];


if(this.isEnough){
  classArr.push('unEmpty');
}
return classArr;

}
}

在引用元件的時候增加class,這是元件child的類名有a,b兩個
<template><div class="a"></div></template>
<child class="b"></child>


條件渲染時的注意事項

vue為了高效能渲染,一般會複用已渲染過的標籤。
假如有一個登入框,根據選擇的登入方式切換input,一個是手機登入,一個是郵箱登入。因為vue會複用原來已有的input,所以當你切換到郵箱登入時,input裡還會儲存有手機登入時的內容,這顯然是不符合條件的。
通過在input上新增key可以區別元素


&lt;div class="" v-if="isSeen"&gt;
  &lt;input type="text" name="" value="" placeholder="enter a" key="a"&gt;
&lt;/div&gt;
&lt;div class="" v-else&gt;
  &lt;input type="text" name="" value="" placeholder="enter b" key="b"&gt;
&lt;/div&gt;
&lt;div class="" @click="isSeen=!isSeen"&gt;
  toggle
&lt;/div&gt;
data:{
isSeen:true
}

當同時使用v-for和v-if的注意事項

v-for的優先順序是高於v-if的,當只需要渲染滿足一些特點條件的元素時,是很有效的
但是當需要全部渲染時,把v-if放在外面


&lt;div v-if="{{a}}"&gt;&lt;div v-for="item in list"&gt;&lt;/div&gt;&lt;/div&gt;

原文地址:https://segmentfault.com/a/1190000016679712