首页 > 试题广场 >

关于Vue双向数据绑定说法错误的是( )

[单选题]
关于Vue双向数据绑定说法错误的是(   )
  • Vue实现双向数据绑定是采用数据劫持和发布者-订阅者模式
  • Object.defineProperty(obj,key,val)可以监听数组变化,不需要做特殊处理
  • Vue2.0 数据劫持是利用ES5的Object.defineProperty(obj,key,val)方法来劫持每个属性的getter和setter
  • 双向数据绑定指 View↔Model 双向同步——用户更新 View 时 Model 自动更新,程序更新 Model 时 View 也随之自动更新。
推荐
Object.defineProperty(obj,key,val)不可以监听数组变化,需要做特殊处理,所以Vue3.0使用Proxy实现数据监听
编辑于 2021-10-15 15:00:33 回复(0)
Object.defineProperty(obj,key,val)不可以监听数组变化,需要做特殊处理,所以Vue3.0使用Proxy实现数据监听。。。。
发表于 2021-11-22 14:09:59 回复(1)
需要对数组进行包裹。并且添加的时候需要使用set或者$set进行增加。
发表于 2021-11-03 10:12:14 回复(0)
D选项明显表述也有问题,应该是“用户更新了View,Model的数据也自动被更新,同时Model的数据更新时,View的数据也自动被更新,才叫双向绑定”吧
发表于 2023-11-22 20:39:26 回复(1)
Object.defineProperty(obj,key,val)不可以监听数组变化,需要做特殊处理,所以Vue3.0使用Proxy实现数据监听
发表于 2022-09-28 09:04:26 回复(0)
const data = {
    "name":"mimi",
    "age":"18"
} //数据源

const obs = new Observer(data);
function Observer(data) {
    const keys = Object.keys(data);//把所有data的键值按顺序放入一个数组keys中
    keys.forEach((key)=>{
        Object.defineProperty(this,key,{ 
//因为获取和修改data的值时,都是调用了obs的属性对应的get和set,
//而不是data属性的get和set,因此不会死循环栈溢出
            get() {
                return data[key];
            },
            set(val) {
                data[key] = val;
                cosole.log("数据改变,开始重新渲染模板");//发布者发布消息给订阅者,告诉订阅者数据改变了,快点改模板
            }
            
        })
    })
    
}

let vm = {}
vm._data = data = obs;//实现mini版data
以上是$set监听data中的对象形式的数据的原理,但vue无法直接监听到数组内部元素的改变,必须调用特定方法,如push,pop等才能在修改数组元素的同时重新渲染模板

如下则为错误写***死循环
const data = {
    "name":"mimi",
    "age":18
}

Object.defineProperty(data,"name",{
    get() {
        return data["name"];
        /**第一次触发get返回时,
        需要读取data中的name属性,再次触发第二次get函数,同理,不断触发get函数*/
    },
    set(val) {
    /**第一次触发set时,需要修改data中的
    name属性,再次触发第二次set函数,同理,不断触发set函数*/
        data["name"] = val;
        console.log("数据改变,渲染模板")
    }
})
采用数据劫持和发布者-订阅者模式的组合,Vue实现了双向数据绑定的功能。数据劫持确保了属性的变化能够被追踪和监听,而发布者-订阅者模式则负责数据变化时的通知和更新操作。

编辑于 2024-01-02 22:31:21 回复(0)
Vue 2.x对于数组的监听是通过劫持原型方法实现的。
发表于 2022-03-21 12:39:14 回复(0)
Object.defineProperty可以监听数组变化,只是vue2没有使用Object.defineProperty进行数组监听
发表于 2024-09-01 16:07:21 回复(0)
监听数组没有意义
发表于 2022-09-13 00:31:48 回复(0)
Object.defineProperty(obj,key,val)不能监听对象里面属性的变化
发表于 2022-11-14 19:18:17 回复(0)
Object.defineProperty这个不是说可以监听数组变化吗,vue2只是因为性能问题去掉了这个功能
发表于 2022-10-27 08:14:26 回复(0)
Object.defineProperty(obj,key,val)可以监听数组变化,需要做特殊处理。
发表于 2022-04-03 09:54:12 回复(0)