Javascript 在$apply中刷新$scope
在我的HTML中,我有一个带有Javascript 在$apply中刷新$scope,javascript,angularjs,Javascript,Angularjs,在我的HTML中,我有一个带有ng click属性的元素来触发一个函数。此函数包含一个循环,该循环在每个步骤中调用另一个函数。现在,我想在循环的每个步骤之后刷新我的$scope,但是: 我无法使用$scope.$apply,因为由于ng click属性,我已经处于$apply阶段 我不能使用onclick而不是ng click,因为click函数会发生变化(特别是ng repeat),并且 $timeout不起作用,因为它以某种方式扰乱了循环中函数的运行顺序(我猜click函数运行循环,然后发
ng click
属性的元素来触发一个函数。此函数包含一个循环,该循环在每个步骤中调用另一个函数。现在,我想在循环的每个步骤之后刷新我的$scope
,但是:
- 我无法使用
,因为由于$scope.$apply
属性,我已经处于ng click
阶段$apply
- 我不能使用
而不是onclick
,因为click函数会发生变化(特别是ng click
),并且ng repeat
不起作用,因为它以某种方式扰乱了循环中函数的运行顺序(我猜click函数运行循环,然后发生$timeout
中的位)$timeout
// IN MY HTML
<th class="groupHeader" ng-repeat="j in groupsMain" ng-click="thClickColumn(j)">{{j}}</th>
// IN MY CONTROLLER
$scope.thClickColumn = function(j) {
// some code
for ( var i = 1 ; i <= 7 ; i++ ) {
_this.tdClick(i,j) ; // I'd like my $scope to refresh after doing this
if ( _this.inputElement === false ) { return ; } // Also, this bit here should break the loop if the condition is met (_this.inputElement is returned by the function above)
}
} ;
//在我的HTML中
{{j}
//在我的控制器中
$scope.thClickColumn=函数(j){
//一些代码
对于(var i=1;i实际上您可以使用$timeout
,只需确保承诺链是正确的:
$scope.thClickColumn = function(j){
var iterator = 7;
function call(){
if(iterator > 0){
_this.tdClick(iterator, j);
$timeout(function(){
iterator--;
if(_this.inputElement !== false){
call()
}
})
}
}
call();
}
为什么在循环的每一步之后都需要刷新$scope
?Angular继续执行脏检查并运行所有观察者,例如$watch
es,直到不再对$scope
进行更改。如果它必须运行超过N
次迭代(我认为是50次),它会抱怨。除此之外,$scope
只是一个普通的旧Java对象,您应该能够以通常的方式在其上设置属性。也许我没有理解您所说的“刷新我的$scope
”的意思?也许我没有正确地表达自己的意思(抱歉,在这方面我还是新手)。我的意思是,我想更新绑定,并在每次循环后立即查看页面中所做的更改。很好,我回家后会尝试此操作。请解释一下它是如何工作的,好吗?:)它工作得很好!现在我可以真正查看它了,我看到它是如何工作的。非常感谢!:D