我正在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()只有当它当前没有运行时才能避免这种情况?如果您有任何其他建议,我会欢迎他们。
答案 0 :(得分:0)
试试这个:
setTimeout(function() {
$scope.$apply(/**your function*/);
}, 1000);
此处有更多解释:Why is using if(!$scope.$$phase) $scope.$apply() an anti-pattern?