2016-04-25 2 views
3

В моем 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) 
    } 
} ; 

Спасибо!

+0

Почему вам нужно обновить '$ scope' после каждого шага цикла? – Sampath

+0

Угловой продолжает выполнять грязную проверку и работу всех наблюдателей, например. '$ watch'es, пока больше не будет внесено изменений в' $ scope'. Он будет жаловаться, если он должен запустить больше, чем 'N' итераций (я думаю, что это было 50). Кроме того, '$ scope' является просто старым Java-объектом, и вы должны иметь возможность устанавливать свойства на нем обычным способом. Возможно, мне не хватает того, что вы имеете в виду, когда говорите «обновите мой« объем »? –

+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(); 
} 
+0

Прохладный, я попробую это, когда вернусь домой. Можете ли вы объяснить, как это работает, пожалуйста? :) –

+0

Он отлично работает! И теперь, когда я могу реально взглянуть на это, я вижу, как он работает. Большое спасибо! : D –

Смежные вопросы