Angular - Infinite $ digest循环

时间:2017-03-08 15:11:51

标签: javascript angularjs infinite-loop angular-digest

我目前正在开展一个项目,我必须从视图中执行多个帖子请求。我的问题是,我总是得到一个无限的$ digest循环。这是我目前的代码:

JS-文件:

$scope.foo = function(param) {
   var deffered = $q.defer();

   $http.post('ASDASD.php', {string : param})
     .then(function(data) {
       deffered.resolve(data);
       $scope.$apply();
    }
  );

  return deffered.promise;
};

$scope.bar = function(param) {
  $scope.foo(param).then(function(result) {
    return result;
  });
};

视图:

<div ng-controller='asdfCtrl'>
   {{bar('asdf')}}
    ...
   {{bar('jkl')}}
</div>

正如你所看到的,我使用了promises,watcher和$ scope。$ apply,但仍然存在无限循环。

有没有办法确保函数栏(和相应的foo)只调用一次?

提前致谢!

1 个答案:

答案 0 :(得分:1)

每次摘要周期运行时发出请求都没有意义。改为使用这样的代码:

JS:

$scope.results = {};

$scope.bar = function(param) {
    $scope.foo(param).then(function(result) {
        $scope.results[param] = result;
    });
};

$scope.bar('asdf');
$scope.bar('jkl');

HTML:

<div>
    {{results['asdf']}}
    ...
    {{results['jkl']}}
</div>

此外,从您的$scope.$apply()功能中移除$scope.foo,不需要。