淺談本項(xiàng)目中的數(shù)據(jù)雙向綁定,修改對(duì)象屬性以及數(shù)組

用習(xí)慣angular.js之后,大多數(shù)開發(fā)者再學(xué)習(xí)vue的話,其實(shí)總體來說,是比較好上手的,但是歸于一些細(xì)節(jié),還是有不同的,比如數(shù)據(jù)的雙向綁定。

先來看一下vue中修改對(duì)象的屬性:

//html代碼
<div id="message">
    <div>
        {{obj.title}}
    </div>
    <button @click="changeObjTitle">更換對(duì)象的title屬性</button>
</div>
//js代碼
<script>
    var app = new Vue({
        el: '#message',
        data: {
            message: 'Hello Vue!',
            obj : {
                'title' : 'This a obj.',
                'content' : '……'
            }
        },
        methods : {
            changeObjTitle : function () {
                this.obj.title = 'This a change obj title';
            },
        }
    })
</script>

還好,這個(gè)和angular.js的數(shù)據(jù)雙向綁定是一樣的,這里不多說,看以上代碼就能明白。

來看一下數(shù)組的操作:

//html代碼
 <div v-for="item in arr">
    {{item.index}}
</div>
<button @click="changeArr">更改數(shù)組</button>
<button @click="change">更改數(shù)組</button>
<script>
    var app = new Vue({
        el: '#message',
        data: {
            message: 'Hello Vue!',
            obj : {
                'title' : 'This a obj.',
                'content' : '……'
            },
            arr : [{
                'index' : 1
            },{
                'index' : 2
            },{
                'index' : 3
            },{
                'index' :4
            }]
        },
        methods : {
            changeObjTitle : function () {
                this.obj.title = 'This a change obj';
            },
            changeArr : function () {
                this.arr[0].index = 'hahah';
            },
            change : function () {
                this.arr[0] = {
                    'index' :'heheh'
                }
                console.log(this.arr);
            }
        }
    })
</script>

先來看一下changeArr的效果,當(dāng)然結(jié)果和預(yù)期的一樣:


再來看看change的效果:


我們發(fā)現(xiàn),change方法并沒有觸發(fā)vue頁面中的重新渲染,而在控制臺(tái)中打印的數(shù)組確實(shí)已經(jīng)變化了,WHY?

由于javascript的限制,vuejs不能檢測(cè)到下面數(shù)組的變化:

直接索引設(shè)置元素,如vm.item[0]={};
修改數(shù)據(jù)的長(zhǎng)度,如vm.item.length。

為了解決問題,Vuejs擴(kuò)展了觀察數(shù)組,為它添加一個(gè)$set()方法:

如何使用,這里不必多說了,給一個(gè)示例



一個(gè)簡(jiǎn)單的數(shù)組位置替換。

再附上一個(gè)vue比較常見的問題的傳送門,寫得很好。
https://segmentfault.com/a/1190000005832164

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載 :OpenDiggawesome-github-vue 是由OpenDigg整理并維護(hù)的Vue相關(guān)開源項(xiàng)目庫...
    果汁密碼閱讀 23,419評(píng)論 8 124
  • 來源:github.com Vue.js開源項(xiàng)目速查表:https://www.ctolib.com/cheats...
    zhangtaiwei閱讀 11,942評(píng)論 1 159
  • 一 我想讓我的女朋友林安嫁給我,我想讓她陪我騎馬喝酒走四方,可是她總不肯。 其實(shí),林安只要肯嫁給我,她以后都可以不...
    廉子閱讀 1,723評(píng)論 4 20
  • 想起之前和主管說要離職,因?yàn)楝F(xiàn)在電話銷售這個(gè)工作不是自己想做的,之所以做保險(xiǎn)只是因?yàn)樵谀硞€(gè)電視里看到保險(xiǎn)...
    我就是村姑閱讀 295評(píng)論 0 1
  • 1.ref理解 ref:顯示索引的哪一列被使用了,有時(shí)候會(huì)是一個(gè)常量:表示哪些列或常量被用于用于查找索引列上的值 ...
    糖紙瘋了閱讀 6,261評(píng)論 0 0

友情鏈接更多精彩內(nèi)容