Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在$apply中刷新$scope_Javascript_Angularjs - Fatal编程技术网

Javascript 在$apply中刷新$scope

Javascript 在$apply中刷新$scope,javascript,angularjs,Javascript,Angularjs,在我的HTML中,我有一个带有ng click属性的元素来触发一个函数。此函数包含一个循环,该循环在每个步骤中调用另一个函数。现在,我想在循环的每个步骤之后刷新我的$scope,但是: 我无法使用$scope.$apply,因为由于ng click属性,我已经处于$apply阶段 我不能使用onclick而不是ng click,因为click函数会发生变化(特别是ng repeat),并且 $timeout不起作用,因为它以某种方式扰乱了循环中函数的运行顺序(我猜click函数运行循环,然后发

在我的HTML中,我有一个带有
ng click
属性的元素来触发一个函数。此函数包含一个循环,该循环在每个步骤中调用另一个函数。现在,我想在循环的每个步骤之后刷新我的
$scope
,但是:

  • 我无法使用
    $scope.$apply
    ,因为由于
    ng click
    属性,我已经处于
    $apply
    阶段
  • 我不能使用
    onclick
    而不是
    ng click
    ,因为click函数会发生变化(特别是
    ng repeat
    ),并且
  • $timeout
    不起作用,因为它以某种方式扰乱了循环中函数的运行顺序(我猜click函数运行循环,然后发生
    $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