在$ apply中刷新$ scope

时间:2016-04-25 20:13:05

标签: javascript angularjs

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

  • 我无法使用$scope.$apply,因为$apply属性已经在ng-click阶段内,
  • 我无法使用onclick代替ng-click,因为点击功能会更改(具体为ng-repeat),
  • $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)
    }
} ;

谢谢!

1 个答案:

答案 0 :(得分:1)

实际上你可以使用$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();
}