由于动态 JSON 更改,正在更新 AngularJS ng-repeat table
Updating AngularJS ng-repeat table due to dynamic JSON changes
我想显示每只动物的最后 activity 状态,而 activity 状态和动物可能会随时间变化。
首先我得到这个JSON:
$scope.JSON = [
{"Animal" : "Horse", "Status" : "awake", "LastUpdate" : { "$date" : 1473248184519 }},
{"Animal" : "Rabbit", "Status" : "awake", "LastUpdate" : { "$date" : 1473248194240 }},
{"Animal" : "Rabbit", "Status" : "eating", "LastUpdate" : { "$date" : 1473249639255 }},
{"Animal" : "Horse", "Status" : "eating", "LastUpdate" : { "$date" : 1473249652549 }},
{"Animal" : "Horse", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249656338 }}
]
如果动物正在做一些新的事情,JSON 会自动更改,f.e。兔子现在正在睡觉,就像出现新动物一样,f.e。一头牛:
$scope.JSON = [
{"Animal" : "Horse", "Status" : "awake", "LastUpdate" : { "$date" : 1473248184519 }},
{"Animal" : "Rabbit", "Status" : "awake", "LastUpdate" : { "$date" : 1473248194240 }},
{"Animal" : "Rabbit", "Status" : "eating", "LastUpdate" : { "$date" : 1473249639255 }},
{"Animal" : "Horse", "Status" : "eating", "LastUpdate" : { "$date" : 1473249652549 }},
{"Animal" : "Horse", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249656338 }},
{"Animal" : "Rabbit", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249659505 }},
{"Animal" : "Cow", "Status" : "awake", "LastUpdate" : { "$date" : 1473249659505 }};
]
这个 JSON 会随着时间的推移而扩展,因此我只想显示 table 中不同动物的最后一个值,如下所示:
动物Table例子:
主要问题 是,随着时间的推移,新动物会添加到 jSON 中,应该自动检测并添加到 table 中。
我想到了两个解决方案:
1, ng-repeat + filter + limitTo
对于此尝试,请查看此 Plunker
https://plnkr.co/edit/ftea6vd1qaPZaXGusZAN
除了自动检测新动物,这几乎为我提供了一切,有什么建议?
2,为每个动物创建子集 JSONs
我会创建一个新的 JSON 子集,其中只包含一只动物,并在这个新的 JSON 上重复 ng(使用 lastitem)。通过遍历所有动物(如何获得所有动物?也许作为 foreach 列表?)我可以获得每只动物的每个最后状态?
这样更好,甚至可能吗?
我会创建一个方法来向 ng-repeat 提供数据,而不是直接传递 JSON ng-repeat="roll in filtering(JSON)
在那个函数上会创建类似这样的东西:
function filtering(animals){
var temp = [].concat(animals);
var animalsExisting = []; // To keep track of animals already added
return temp.reverse().filter(function(animal){
var notAdded = animalsExisting.indexOf(animal.Animal) === -1;
if(notAdded) animalsExisting.push(animal.Animal);
return notAdded;
});
}
所以会反转数组,因此它从最后添加的开始并过滤它们,只添加最后一个(因为它被反转了)。
希望对您有所帮助
我想显示每只动物的最后 activity 状态,而 activity 状态和动物可能会随时间变化。
首先我得到这个JSON:
$scope.JSON = [
{"Animal" : "Horse", "Status" : "awake", "LastUpdate" : { "$date" : 1473248184519 }},
{"Animal" : "Rabbit", "Status" : "awake", "LastUpdate" : { "$date" : 1473248194240 }},
{"Animal" : "Rabbit", "Status" : "eating", "LastUpdate" : { "$date" : 1473249639255 }},
{"Animal" : "Horse", "Status" : "eating", "LastUpdate" : { "$date" : 1473249652549 }},
{"Animal" : "Horse", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249656338 }}
]
如果动物正在做一些新的事情,JSON 会自动更改,f.e。兔子现在正在睡觉,就像出现新动物一样,f.e。一头牛:
$scope.JSON = [
{"Animal" : "Horse", "Status" : "awake", "LastUpdate" : { "$date" : 1473248184519 }},
{"Animal" : "Rabbit", "Status" : "awake", "LastUpdate" : { "$date" : 1473248194240 }},
{"Animal" : "Rabbit", "Status" : "eating", "LastUpdate" : { "$date" : 1473249639255 }},
{"Animal" : "Horse", "Status" : "eating", "LastUpdate" : { "$date" : 1473249652549 }},
{"Animal" : "Horse", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249656338 }},
{"Animal" : "Rabbit", "Status" : "sleeping", "LastUpdate" : { "$date" : 1473249659505 }},
{"Animal" : "Cow", "Status" : "awake", "LastUpdate" : { "$date" : 1473249659505 }};
]
这个 JSON 会随着时间的推移而扩展,因此我只想显示 table 中不同动物的最后一个值,如下所示:
动物Table例子:
主要问题 是,随着时间的推移,新动物会添加到 jSON 中,应该自动检测并添加到 table 中。
我想到了两个解决方案:
1, ng-repeat + filter + limitTo
对于此尝试,请查看此 Plunker https://plnkr.co/edit/ftea6vd1qaPZaXGusZAN
除了自动检测新动物,这几乎为我提供了一切,有什么建议?
2,为每个动物创建子集 JSONs
我会创建一个新的 JSON 子集,其中只包含一只动物,并在这个新的 JSON 上重复 ng(使用 lastitem)。通过遍历所有动物(如何获得所有动物?也许作为 foreach 列表?)我可以获得每只动物的每个最后状态?
这样更好,甚至可能吗?
我会创建一个方法来向 ng-repeat 提供数据,而不是直接传递 JSON ng-repeat="roll in filtering(JSON)
在那个函数上会创建类似这样的东西:
function filtering(animals){
var temp = [].concat(animals);
var animalsExisting = []; // To keep track of animals already added
return temp.reverse().filter(function(animal){
var notAdded = animalsExisting.indexOf(animal.Animal) === -1;
if(notAdded) animalsExisting.push(animal.Animal);
return notAdded;
});
}
所以会反转数组,因此它从最后添加的开始并过滤它们,只添加最后一个(因为它被反转了)。
希望对您有所帮助