0

我有一个名为myApp. 我的 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 的常规键值对解决方案,我根本不改变组件,并完成构建它应该看起来的样子,然后为其分配值,那么它就可以正常工作。如果我尝试分配一个键值对,其中值是另一个包含键值对的对象,那么它仍然不起作用。

4

1 回答 1

1

是否在该组件的对象中myApp.messages预先声明?data

看起来您正在为每条消息添加一个新属性。 findUserVue 无法检测到这一点(请参阅更改检测警告)。您应该在将有效负载分配给组件之前对其进行变异(此时 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;
}
于 2017-12-19T23:29:08.500 回答