【问题标题】:Want to add and subtract items from $scope array想要从 $scope 数组中添加和减去项目
【发布时间】:2015-11-21 16:41:58
【问题描述】:

我正在使用 $scope.exchange 将数据发送到 ng3 图表。我希望图表添加一个新值并删除最旧的值。所以我从来没有超过3分。它目前每秒增加 3 个点,但从不删除任何点。如果我将带有 slice 的行更改为 $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", 
    };
});
})();

【问题讨论】:

  • 数组切片返回数组部分的浅拷贝。您实际上并没有修改数组本身。
  • 我不知道如何解决这个问题,但以下试验失败了。 $scope.exchange = $scope.exchange.slice(3);

标签: javascript arrays scope


【解决方案1】:

使用小提琴会更容易,但这就是我认为你想要的。首先,我会“取消转移”这个新信息,而不是“推动”它。在我看来,您当前正在将数据添加到末尾,然后删除相同的数据。然后我会 pop() 结束项目,而不是假设该对象有 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);

希望这会有所帮助。

【讨论】:

  • 它没有用。它只是在图表中添加新点,但我不希望图表改变大小。你添加一个论点是对的,一旦我解决了这个当前的问题,它就会被构建出来。 unshift 将不起作用,因为我需要最旧的数据和最新的数据
  • 我需要看看你的脚本是如何使用数据的。马上,我不知道“table.rows”与“exchange”是什么——它们都在使用“data”。我相信 table.rows 没有正确构建,但由于我看不到它是如何使用的,所以我不能说。无论如何,恐怕在没有更多信息的情况下我能做到这一点。干杯。
  • 我不认为 table.rows 对这个问题很重要,但我理解你的困难。所有代码都在这里:github.com/chad187/StockMarket 并且该代码执行此操作:ec2-52-88-60-196.us-west-2.compute.amazonaws.com
【解决方案2】:

@Shashank 走在正确的轨道上,一切都在创建一个我的其余代码无法接受的新对象。 pop() 只是改变当前数组,因此被代码的所有部分接受。所以我不得不这样做

this.setHistory = function(input) {
    while($scope.exchange.length){
    $scope.exchange.pop();
    }
    $scope.history = input;
    startup(input, $scope.historyData);
};

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多