vue为什么v-model绑定Object的时候不生效?

发布于 2022-09-05 00:36:31 字数 697 浏览 31 评论 0

简单描述:当vue的data里面有一个属性是Object类型的时候,v-model绑定就失效了。

这里有一段在线代码:https://jsfiddle.net/oukichi/...

不想看在线代码的话,我把简单的代码贴出来:

<div id="app">
  <div>
    {{ob.txt}}
    <input type="text" v-model="ob.txt">
  </div>
  <div>
    {{name}}
    <input type="text" v-model="name">
  </div>
</div>
new Vue({
    el:'#app',
  data:{
      name:'张三',
    ob:{}
  },
})

代码很简单,name属性是普通字符串,ob属性是一个对象。
当我在第一个input输入的时候,我的{{ob.txt}}表达式应该有相应的变化,然而事实并没有。
当我在第二个input输入的时候,{{name}}表达式可以正常产生变化。

似乎v-model和Object类型的属性无法成功绑定,请问这是怎么回事呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

太阳哥哥 2022-09-12 00:36:31

应该是你在model里面没有定义txt吧,试试这么写呢?

new Vue({
    el:'#app',
    data:{
      name:'张三',
      ob:{
        txt: '李四'
      }
  },
})
天暗了我发光 2022-09-12 00:36:31

如果未知obj中需要定义哪些属性,可以把v-model展开,如文档所述,v-model其实是一种语法糖。

<div id="app">
  <div>
    {{ob.txt}}
    <input type="text" v-bind:value="ob.txt" v-on:input="oninput($event.target.value)">
  </div>
  <div>
    {{name}}
    <input type="text" v-model="name">
  </div>
</div>

new Vue({
  el:'#app',
  data:{
    name:'张三',
    ob:{}
  },
  methods: {
    oninput(val) {
      this.$set(this.ob, 'txt', val)
    }
  }
})

如此这般

玉环 2022-09-12 00:36:31

楼上的方法可以,但是如你所说,不知道obj里面需要定义什么东西,又需要里面的东西得到双向绑定的话,你需要使用Vue.set(obj, key, value),官方文档写得很清楚,你可以去看下。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文