当前位置: 首页 > 知识库问答 >
问题:

前端 - vue2怎么双向绑定一个对象?

阎德宇
2023-10-10

这个对象里的属性个数和key都是未知的

共有1个答案

冯星剑
2023-10-10

在Vue 2中,要实现对象的双向绑定,可以使用Vue.set方法和vm.$set方法。这两个方法都可以在Vue实例上设置响应式对象或数组。

首先,需要明确对象里属性个数和key都是未知的情况,是无法直接使用v-model的,因为v-model在编译过程中会尝试直接替换为prop绑定,如果属性不存在,则编译失败。

这种情况下,可以先使用Object.assign...运算符将源对象赋值给新的目标对象,然后再使用v-model绑定新对象。

例如:

<template>  <div>    <input v-model="newObject" />    <p>{{ newObject }}</p>  </div></template><script>export default {  data() {    return {      originalObject: {},    };  },  created() {    // 将源对象赋值给新对象    this.newObject = Object.assign({}, this.originalObject);  },  watch: {    // 当原对象发生变化时,更新新对象    originalObject(newVal) {      this.newObject = Object.assign({}, newVal);    },  },};</script>

在这个示例中,通过监听originalObject的变化,当原对象发生变化时,新的对象会进行相应的更新。这样就可以实现双向绑定。但是这个示例只能处理属性个数和key都是已知的情况,对于未知的情况,无法使用此方法。因为在未知的情况下,我们无法知道原对象有什么属性,也就无法使用Object.assign进行复制。

对于属性个数和key都是未知的情况,可能需要考虑使用第三方库如Vuex或者Vue3的Composition API来进行处理。

 类似资料:
  • 怎么让span相对于最外层的div固定定位?(fixed),为什么最外层div的postion设置为了relative,span的postion设置为fixed,top:0,right:0后,会跑到整个页面的右上角?

  • Mpx针对表单组件提供了wx:model双向绑定指令,类似于v-model,该指令是一个语法糖指令,监听了组件抛出的输入事件并对绑定的数据进行更新,默认情况下会监听表单组件的input事件,并将event.detail.value中的数据更新到组件的value属性上。 简单实用示例如下: <view> <input type="text" wx:model="{{message}}"> <

  • 双向绑定这个概念在angular出现的时候,就作为王牌概念. 现在几乎是个js前端框架,就有这个功能. 它的概念是: 某个变量, 如果展现在页面上的话: 如果在代码层面进行修改, 那么页面的值就会发生变化 如果在页面进行修改(例如在input标签中), 那么代码的值就会发生变化. 一个演示例子. 在我们的项目中,增加一个 vue页面: src/components/TwoWayBinding.vu

  • 单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新。 有单向绑定,就有双向绑定。如果用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。 什么情况下用户可以更新View呢?填写表单就是一个最直接的例子。当用户填写表单时,View的状态就被更新了,如果此时MVVM框架可以自动更新Model的状态,那就相当于我

  • 在这一步你会增加一个让用户控制手机列表显示顺序的特性。动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情。 请重置工作目录: git checkout -f step-4 你应该发现除了搜索框之外,你的应用多了一个下来菜单,它可以允许控制电话排列的顺序。 步骤3和步骤4之间最重要的不同在下面列出。你可以在GitHub里看到完整的差别。 模板 app/in