【轉】Vue2.0 Vue.set的使用

這裏我定義了一個列表數據,我將通過三個不同的按鈕來控制列表數據。

首先在列表中動態新增一條數據:

 

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="app2">
<!--想了解這裏key的作用請訪問:(https://cn.vuejs.org/v2/api/#key)-->
    <p v-for="item in items" :key="item.id">
        {{item.message}}
    </p>
    <!--@click等價於v-on:click-->
    <button class="btn" @click="btn1Click()">點我試試</button><br/>
</div>

<script src="../../dist/vue.min.js"></script>
<script>
    var vm2=new Vue({
        el:"#app2",
        data:{
            items:[
                {message:"Test one",id:"1"},
                {message:"Test two",id:"2"},
                {message:"Test three",id:"3"}
            ]
        },
        methods:{
            btn1Click:function(){
                this.items.push({message:"動態新增"});//爲data中的items動態新增一條數據
            }
        }
    });
</script>
</body>
</html>

這是我點擊之前的列表:

 

這裏寫圖片描述

點擊之後列表新增了一條數據:

 

這裏寫圖片描述

通過數組的變異方法Vue數組變異方法)我們可以動態控制數據的增減,但是我們卻無法做到對某一條數據的修改。這時候就需要Vue的內置方法來幫忙了~

Vue.set() 響應式新增與修改數據


此時我們需要知道Vue.set()需要哪些參數,官方API:Vue.set()

調用方法:Vue.set( target, key, value )

target:要更改的數據源(可以是對象或者數組)

key:要更改的具體數據

value :重新賦的值


我們依然用上面列表舉例:

 

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="app2">
    <p v-for="item in items" :key="item.id">
        {{item.message}}
    </p>
    <button class="btn" @click="btn2Click()">動態賦值</button><br/><br/>
    <button class="btn" @click="btn3Click()">爲data新增屬性</button>
</div>

<script src="../../dist/vue.min.js"></script>
<script>
    var vm2=new Vue({
        el:"#app2",
        data:{
            items:[
                {message:"Test one",id:"1"},
                {message:"Test two",id:"2"},
                {message:"Test three",id:"3"}
            ]
        },
        methods:{
            btn2Click:function(){
                //Vue methods中的this 指向的是Vue的實例,這裏可以直接在this中找到items
                Vue.set(this.items,0,{message:"Change Test",id:'10'})
            },
            btn3Click:function(){
                var itemLen=this.items.length;
                Vue.set(this.items,itemLen,{message:"Test add attr",id:itemLen});
            }
        }
    });

</script>
</body>
</html>

此時頁面是這樣

這裏寫圖片描述

我點擊第一個按鈕後運行methods中的btn2Clcick方法,此時我要將Test one更改爲Change Test

這裏寫圖片描述

運行後的結果:此時列表中第一列的Test one已經變成了Change Test

 

這裏寫圖片描述

這裏得警惕一種情況:
當寫慣了JS之後,有可能我會想改數組中某個下標的中的數據我直接this.items[XX]就改了,如:

 

btn2Click:function(){
                this.items[0]={message:"Change Test",id:'10'}
            }

我們來看看結果:

這裏寫圖片描述

這種情況,是Vue文檔中明確指出的注意事項,由於 JavaScript 的限制,Vue 不能檢測出數據的改變,所以當我們需要動態改變數據的時候,Vue.set()完全可以滿足我們的需求。

仔細看的同學會問了,這不是還有一個按鈕嗎,有什麼用?

我們還是直接看:

這裏寫圖片描述

這是初始的列表數據,數據裏面有三個對象

點擊之後:

這裏寫圖片描述

這裏可以看出,Vue.set()不光能修改數據,還能添加數據,彌補了Vue數組變異方法的不足

Tip:Vue.set()在methods中也可以寫成this.$set()



作者:洛禾sunshime
鏈接:https://www.jianshu.com/p/c39d1c670d49
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章