vue隨筆

火雲邪神發表於2017-11-12

路由傳參,父向子傳值:


子向父傳值:

同級元件傳值:

vue的watch和computed的用法及區別:


vue的watch和computed的用法及區別:
watch:
理解:一個依賴資料影響多個資料.比如正數5=3+2;5變化,5後面的3或者2變化;6 = 3 +3,3+3依賴於6
————————————————
型別: Object
———————————————
用法:觀察 Vue 例項的一個表示式或計算函式
————————————————
引數(任意合法繫結表示式/object/鍵路徑,對應回撥(新值,舊值),方法)
———————————————
方法:deep:true/false 為了發現物件內部值的變化;也叫深度監聽,陣列的改變不需要使用深度watch
immediate:true/false 表示以表示式的當前值觸發回撥
——————————————
computed:一個資料被多個資料影響
理解:計算屬性持續追蹤它的響應依賴。在計算一個計算屬性時,Vue更新它的依賴列表並快取結果,只有當其中一個依賴發生了變化,快取的結果才無效。因此,只要依賴不發生變化,訪問計算屬性會直接返回快取的結果,而不是呼叫 getter。快取為計算巨型陣列給了好處。
比如:已知a和b的值,求 a + b = c的值,就是a或者b或者同時改變時c發生變化,c依賴於a 或者 b
————————————
型別: Object
————————————
用法:為vue例項提供了計算屬性,getter和setter的this自動地繫結到例項。
————————————
方法:getter 和 setter 預設為getter函式
getter(在獲取值時觸發) 優點:在資料未發生變化時,優先讀取快取,計算屬性被快取了,在訪問它時 getter 不總是被呼叫;關閉快取(總是被呼叫)cache: false
set(在設定時值觸發)

下面瞧瞧watch和computed的用例:

<template>
    <div>
        <input type="text" outfous="outfous" required="required" v-model:value="first.name"/>
        <input type="text" name="" v-model:value="last.name">
        以上通過v-model繫結一個物件在value上,並自定義屬性name
        <input type="text" name="" v-model:value="full">
    </div>
</template>
<script>
    export default {
        data () {
            return {
                first: {
                    name:''
                },
                last:{
                    name:''
                 },
                 full:''

            }
        },
        watch: {
            first: {
                handler: function (val1,oldVal1) {
                    this.full = this.last.name + val1.name
                },
                deep:true,
//     deep:true,//監聽物件內部值的變化,深度監聽,在引數中指定 deep: true
//     immediate: true將立即以表示式的當前值觸發回撥
            },
            last: {
                handler: function (val2,oldVal2) {
                    this.full = val2.name +  this.first.name
                },
                deep:true
            },

// 以鍵路徑的方式監聽物件的屬性,鍵路徑要加引號
            'first.name': function (val1,oldVal1) {
                this.full = val1 + this.last.name;
            },
            'last.name': function (val2,oldVal2) {
                this.full = val2 + this.first.name;
            }
        },
// computed實現監聽
        computed: {
 // 普遍寫法
                full:function () {
                    return this.first.name + this.last.name
                },
 // 標準寫法 預設是每個計算屬性計算時有get函式,可以進行快取
                full:{
                get () {
                    return this.first.name + this.last.name
                }
                }
        }
    }
</script>
 <template>
    <div>
    <p>{{a}}</p>1
    <p>{{b}}</p>2
    <p>{{c}}</p>3
    </div>
</template>

<script>
    export default {
        data () {
            return {
                a: 1
            }
        },
        computed: {
            // 不需要set設定值時
            b () {
                get:{
                return this.a + 1
            },
             // cache: false,為指定的計算屬性關閉快取
            },
            // 設定set值時:
            b: {   //b依賴於a
                set (val) {
                      this.a = val + 3
                },
                get () {
                    return this.a + 1
                },
            },
            c () {
                get:{
                    return this.a + this.b
                }
            }
            c: {
                get () {
                    可以通過Date.now()證明c和b依賴於a,只要a和b變更,Date.now()就變
                    return this.a + ' ' + this.b + ' '+ Date.now()
                }
            }
        }

    }
</script>複製程式碼