【问题标题】:Vue JS in HTML Not Recognizing Added Objects and PropertiesHTML 中的 Vue JS 无法识别添加的对象和属性
【发布时间】:2018-06-02 10:37:54
【问题描述】:

我有一个名为 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。

我是否遗漏了什么,或者我忽略了一个操作顺序?在我添加之前数据中已经存在的任何其他内容都可以很好地绑定。

更新

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

【问题讨论】:

    标签: javascript json data-binding vue.js v-for


    【解决方案1】:

    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;
    }
    

    【讨论】:

    • 我现在不在工作,所以我无法验证它是否适用于我的情况,但我只是创建了一个小测试,它确实有效。我明天会尝试这个,如果它有效,我会将此答案标记为已接受。
    • 这种解决方案很有效,但当我尝试添加更多内容时也失败了。如果我遵循这种模式并尝试添加一个键值对,它就可以工作。如果我尝试添加具有键值对对象的值的键,则它无法识别。不知道为什么。如果您需要澄清我的意思,我可以更新我的原始帖子。
    • 应该可以。我需要看看你的代码和模板。
    猜你喜欢
    • 2013-09-04
    • 2021-03-28
    • 2018-12-09
    • 2022-09-28
    • 2023-02-11
    • 1970-01-01
    • 2021-07-21
    • 2022-11-26
    • 2017-03-26
    相关资源
    最近更新 更多