【发布时间】:2016-01-16 19:52:33
【问题描述】:
我最近开始研究 Vue JS。但是,我面临一个问题。 请参考以下代码:-
<div id="demo">
<ul id="list_music">
<li v-repeat="musics" track-by="_uid">{{ name }}</li>
</ul>
</div>
var demo = new Vue({
el: '#demo',
data : {
musics : null
},
created: function () {
//this.fetchData();
setInterval(this.fetchData, 5000);
},
methods : {
fetchData: function(){
var self = this;
console.log('test');
$.ajax({
type: "POST",
dataType : "json",
url : "test.php",
data: {},
success: function (response){
//self.$data.musics = response;
self.$set("musics", response);
}
});
}
}
});
test.php里面的PHP代码如下:
<?php
$array = [
array("name" => "Test name 0", "_uid" => 0),
array("name" => "Test name 1", "_uid" => 1),
array("name" => "Test name 2", "_uid" => 2),
array("name" => "Test name 3", "_uid" => 3),
array("name" => "Test name 4", "_uid" => 4),
array("name" => "Test name 5", "_uid" => 5),
];
echo json_encode($array);
?>
根据上面的代码,我想要实现的是,代码将每 5 秒执行一次 ajax 请求,并在 ul 标签下动态插入新的 li 元素。如果任何旧值被更改,那么它也应该触发观点的变化。
我已经看过 Vue JS 指南 http://vuejs.org/guide/list.html#Using_track-by 和 track-by 参数的使用。但是我无法使其工作。当我将数组替换为此
array("name" => "Test name Changed", "_uid" => 0);echo json_encode($array);
不是将第一个索引的值从“测试名称 0”更新为“测试名称已更改”,而是替换整个 ul li。
谁能告诉我我在这里做错了什么?
谢谢, 罗纳克·沙阿
【问题讨论】: