如何调用$ scope。$ apply()仅在它尚未进行时调用

时间:2015-02-11 16:17:30

标签: javascript jquery angularjs

我正在AngularJS中构建一个应用程序。我的应用程序还使用了第三方javascript库,它就像这样一个div:

<div id="turn-me-into-a-slider"></div>

现在我实际上有几个div,并使用ng-repeat来制作它们。所以它看起来更像是这样:

<div id="sliders-container" ng-repeat="slider in sliders track by $index">
    <div id="slider-{{$index}}"></div>
</div>

现在在我的代码中,当我想首先添加滑块时,我向sliders数组添加了一个新滑块。那应该传播到DOM中,然后我可以使用id="slider-n"为div上的滑块运行初始化函数。这就是问题所在的地方。如果我在将新值推送到sliders数组之后立即为滑块设置了初始化函数,那么DOM还没有更新,并且当调用滑块初始值设定项时,没有具有正确id的DOM元素,并且初始化失败。如果我先调用$scope.$apply(),则可以解决问题,但偶尔会收到error, $scope.$apply() already in progress。有没有办法可以调用$ scope。$ apply()只有当它当前没有运行时才能避免这种情况?如果您有任何其他建议,我会欢迎他们。

1 个答案:

答案 0 :(得分:0)

试试这个:

setTimeout(function() {
  $scope.$apply(/**your function*/);
}, 1000);

此处有更多解释:Why is using if(!$scope.$$phase) $scope.$apply() an anti-pattern?