我使用$ scope.exchange将数据发送到ng3图表。我希望图表添加新值并删除最旧的值。所以我从来没有超过3分。它目前每秒增加3点但从不删除任何。如果我将切片的行更改为$ scope.exchange = [],则图表将绘制前3个并且永不再次更新。如果我使用被注释掉的while循环,那么图表会每秒重新绘制所有内容。这会闪烁屏幕,看起来很丑陋。我该怎么办?
(function(){
var app = angular.module('exchange-directives', []);
app.directive('tableRows', function() {
return {
restrict: 'E',
templateUrl: "js/directives/tableRow.html",
scope:'=',
link: function(scope, elements, attrs){
},
controller: ['$http', '$timeout', '$scope', function($http, $timeout, $scope) {
var table = this;
table.rows = [];
var count = 0;
var retrieveItems = function() {
if($scope.exchange.length != 0) $scope.exchange.slice(3);
//while($scope.exchange.length){
// $scope.exchange.pop();
//}
$http.get('/dashboard/history').success(function(data){//change back to '/dashboard/rates' when aws goes back online
table.rows = data;
for (i = 0; i < 3; i++){
var vals = {
x: count++,
dates: data.dates[i],
rates: data.rates[i]
}
$scope.exchange.push(vals);
}
$timeout(retrieveItems, 1000);
});
}
retrieveItems();
}],
controllerAs: "table",
};
});
})();
答案 0 :(得分:0)
小提琴会更容易,但这就是我想你想要的。首先,我&#34; d&#34;取消&#34;这个新信息而不是&#34;推动&#34;它。在我看来,您当前正在将数据添加到最后,然后删除相同的数据。然后我弹出()结束项目,而不是假设对象有3个项目。接下来,我传递您要加载的项目数。我不确定table.rows数组是如何使用的,但我猜你也想要取消它。
var retrieveItems = function(num) {
num = num || 1;
if($scope.exchange.length != 0) $scope.exchange.pop();
$http.get('/dashboard/history').success(function(data){
table.rows.unshift(data);
for (i = 0; i < num; i++){
var vals = {
x: count++,
dates: data.dates[i],
rates: data.rates[i]
}
$scope.exchange.unshift(vals);
}
$timeout(retrieveItems, 1000);
});
}
retrieveItems(3);
希望这有帮助。
答案 1 :(得分:0)
@Shashank在正确的轨道上所有东西都在创建一个新的对象,其余的代码都无法接受。 pop()只是改变当前数组,因此被代码的所有部分接受。所以我必须做
this.setHistory = function(input) {
while($scope.exchange.length){
$scope.exchange.pop();
}
$scope.history = input;
startup(input, $scope.historyData);
};