美文网首页
浅谈本项目中的数据双向绑定,修改对象属性以及数组

浅谈本项目中的数据双向绑定,修改对象属性以及数组

作者: lMadman | 来源:发表于2017-12-04 11:30 被阅读0次

用习惯angular.js之后,大多数开发者再学习vue的话,其实总体来说,是比较好上手的,但是归于一些细节,还是有不同的,比如数据的双向绑定。

先来看一下vue中修改对象的属性:

//html代码
<div id="message">
    <div>
        {{obj.title}}
    </div>
    <button @click="changeObjTitle">更换对象的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>

还好,这个和angular.js的数据双向绑定是一样的,这里不多说,看以上代码就能明白。

来看一下数组的操作:

//html代码
 <div v-for="item in arr">
    {{item.index}}
</div>
<button @click="changeArr">更改数组</button>
<button @click="change">更改数组</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的效果,当然结果和预期的一样:


再来看看change的效果:


我们发现,change方法并没有触发vue页面中的重新渲染,而在控制台中打印的数组确实已经变化了,WHY?

由于javascript的限制,vuejs不能检测到下面数组的变化:

直接索引设置元素,如vm.item[0]={};
修改数据的长度,如vm.item.length。

为了解决问题,Vuejs扩展了观察数组,为它添加一个$set()方法:

如何使用,这里不必多说了,给一个示例



一个简单的数组位置替换。

再附上一个vue比较常见的问题的传送门,写得很好。
https://segmentfault.com/a/1190000005832164

相关文章

  • 浅谈本项目中的数据双向绑定,修改对象属性以及数组

    用习惯angular.js之后,大多数开发者再学习vue的话,其实总体来说,是比较好上手的,但是归于一些细节,还是...

  • JS双向数据绑定

    双向数据绑定简述 双向数据绑定,可以将JS对象的属性绑定到DOM节点上,实现JS对象跟DOM节点的同名属性的关联,...

  • ko练习(1)

    可写的依赖监控属性(双向数据绑定) 监控数组(observableArray)

  • vue实现双向绑定原理

    原理 vue数据双向绑定通过‘数据劫持’ + 订阅发布模式实现 数据劫持 指的是在访问或者修改对象的某个属性时,通...

  • vue的指令

    ** v-model 双向数据绑定 ** v-for 数组,对象,数值 最后一...

  • 小程序 小方法

    微信小程序input数据双向绑定 简单实现双向数据绑定--对象下的属性赋值绑定(可以自己改一元变量方式)每个页面引...

  • 响应式对象添加

    响应式数据中对于对象新增/删除属性以及数组的下标访问修改和添加数据等的变化观测不到。通过Vue.set以及修改数组...

  • 2018-09-24(vue指令)路由嵌套

    vue指令 v-for=''(循环数组 对象 数组对象) v-model=''(双向数据绑定,用于表单元素) v-...

  • Vue 2

    v-for="val /value(值) in arr "用来循环数组、对象v-model=" "双向数据绑定,用...

  • vue双向绑定的原理及实现双向绑定MVVM源码分析

    Vue双向数据绑定的原理:可以将对象的属性绑定到UI,具体的说,我们有一个对象,该对象有一个name属性,当我们给...

网友评论

      本文标题:浅谈本项目中的数据双向绑定,修改对象属性以及数组

      本文链接:https://www.haomeiwen.com/subject/memtixtx.html