【问题标题】:Long delay when doing $rootscope.$on with large object对大对象执行 $rootscope.$on 时延迟很长
【发布时间】:2017-01-10 17:02:09
【问题描述】:

在 AngularJS 中,我有一个带有很多功能的 js 对象(工厂)。 4000 行。当我从 php 中提取数据并创建对象时,它会很快。

$http.get('pivots/list.php')
            .success(function (data) {
                $scope.listOfPivots = data;
                  for (var i = 0; i < $scope.listOfPivots.length; i++ ) {
                    pivot = new pivotFactory($scope.listOfPivots[i]);

然后我需要与其他控制器共享所选对象。

$rootScope.$broadcast("Update", pivot);

当我得到选定的对象时,会有几秒钟的暂停。

$rootScope.$on("Update", function(event, p) {
       $scope.selectedPivot = p;
});

如何测量此超时以显示进度条或如何防止这种长时间延迟?

【问题讨论】:

    标签: javascript angularjs object


    【解决方案1】:

    您可以简单地将变量分配给值,而不是发出和广播 $rootScope.selectedpivot=pivot 以便该值在另一个控制器中也可用。这将避免超时

    例如:$rootScope.data=10 分配在一个控制器中。在另一个控制器中,如果您尝试 console.log($rootScope.data),您将得到值 10。

    【讨论】:

    • 感谢@gayathri,它帮助我清理了很多代码并加快了速度。我现在确实看到,当我将一个新工厂对象分配给我的 $rootScope 时会有一个暂停,如下所示: $rootScope.selectedPivot = new pivotFactory($scope.masterListOfPivots[$scope.selectedPivotR‌​ow]);就像我提到的那样,我的工厂大约有 4000 行长。您知道为什么会发生这种情况吗?我可以提供反馈吗?
    • 后端需要时间来完成其执行并通过 http 为您提供值。你需要做的是,给 。在 $http.get 之前,分配 $scope.loading=true 以便加载缓冲区不断出现。在 $http.get 之后,分配 $scope.loading=false。想法是,在后端完成执行之前,拥有一个加载缓冲区,直到后端完成所有操作并将数据获取到 http。只有这样,过程才会同步。希望你能理解。我不明白你所说的反馈是什么意思。
    猜你喜欢
    • 2014-08-03
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多