HTML中的Vue JS无法识别添加的对象和属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML中的Vue JS无法识别添加的对象和属性相关的知识,希望对你有一定的参考价值。

我有一个名为myApp的Vue实例。我在我的Vue JS实例中有一个名为loadPlannedAlerts的方法,它在mounted期间调用。这是一个AJAX调用,首先获取JSON数据,然后添加到它。数据是一个带有键值对的JSON对象,它看起来像{key: 'value, key2: 'value2}'

loadPlannedAlerts: function() {
        $.ajax({
            method: 'GET',
            url: '/get-my-data',
            success: function(data) {
                myApp.messages = JSON.parse(data);
                for (var i = 0; i < myApp.messages.length; i++) {
                    myApp.messages[i].findUser = '';
                }
            }
        });
}

在我的html中,我有一个显示此消息数据的v-for循环。

<div v-for="(message, index) in messages">
    <input type="text" name="user" v-model="message.findUser">
</div>

出于某种原因,我可以在我的浏览器控制台中提取添加的findUser键值,我甚至可以在浏览器的开发工具Vue插件中看到它。但是输入到我的消息框中的数据并不绑定到每个findUsers。

是否有我遗漏的东西,或者我忽略的操作顺序?在添加之前,数据中已存在的任何其他内容都是绑定正常。

UPDATE

如果我遵循Decade Moon的常规键值对的解决方案,我根本不改变组件,并完成它应该看起来的样子,然后为它赋值,然后它工作正常。如果我尝试分配一个键值对,其中值是另一个具有键值对的对象,那么它仍然不起作用。

答案

myApp.messages是否在data对象中声明了该组件的前期?

看起来你正在为每条消息添加一个新的findUser属性。 Vue无法检测到这一点(参见Change Detection Caveats)。在将有效负载分配给组件之前,您应该改变有效负载(此时Vue会使其成为被动的)。

success: function(data) {
  const messages = JSON.parse(data);

  for (var i = 0; i < messages.length; i++) {
    messages[i].findUser = '';
  }

  // Do this last
  myApp.messages = messages;
}

以上是关于HTML中的Vue JS无法识别添加的对象和属性的主要内容,如果未能解决你的问题,请参考以下文章

数据对象无法在 VUE js 3 中的计算属性内求和

Vue导入导致无法分配给对象错误的只读属性'exports'

三种方法实现为数组中的对象添加一个新的属性和值

如何在js文件中获取vue组件对象的data方法中的属性

Vue.config.js 无法识别 require('webpack')

关于Vue中的属性值无法与视图同步的问题