2016-08-11 4 views
0

Я хочу вызвать директиву, когда мой ng-repeat закончен. Я использую два контроллера с одинаковым именем. Моя проблема в том, что когда я вызываю функцию контроллера, функция меняет значение списка. И база в этом списке ng-repeat - это работа. Когда ng-repeat является директивой конца, называется так называемой END-функцией. Но ng-repeat не работает, а директива также не называется.Директива не вызывается, когда ng-repeat завершен

мой HTML-код здесь

> <body ng-app="modules" > 
    <div class="container" > 
     <div class="row" ng-controller="mainctl"> 
      <div class="col-sm-1"> 
       <a href="#" ng-click="divide(1)" ><h3>1*1</h3></a> 
      </div> 
      <div class="col-sm-1"> 
       <a href="#" ng-click="divide(2)"><h3>2*2</h3></a> 
      </div> 
      <div class="col-sm-1"> 
       <a href="#" ng-click="divide(3)"><h3>3*3</h3></a> 
      </div> 
      <div class="col-sm-1"> 
       <a href="#" ng-click="divide(4)"><h3>4*4</h3></a> 
      </div> 
      <div/> 
      <div ng-controller="mainctl"> 
       <div ng-repeat="rows in cells" > <!-- repeat fot rows --> 
        <div class="row"> 
         <div ng-repeat="cols in cells" repeat-end="onEnd()"> <!-- repeat for colums --> 
          <div id="Div_{{rows}}{{cols}}" class="col-sm-2 rcorners2"> 
           <center><h1>{{rows}}{{cols}}</h1></center> 

           <div id="divPictureBoxPlayback{{rows}}{{cols}}" class="pictureboxPlayback'" 
          ad-drop="true" 
          ad-drop-end="onDrop($data, $dragElement, $dropElement, $event);" > 
            <div id="divHeaderPictureBoxPlayback{{rows}}{{cols}}" class="panel panel-default margin-b-0 text-center pictureboxHeader row" 
           ng-hide="StartPlayerPlayback{{rows}}{{cols}}" > 
            <div class=""> 
              <span class="col-lg-3 col-xs-3 col-md-3 text-left">{{cameraNamePlayback00}}</span> 
              <span class="col-lg-9 col-xs-9 col-md-9 text-right pad-0"> 
               <button class="margin-r-10 btn btn-xs" ng-click="StopStreaming('{{rows}}{{cols}}')"><i class="fa fa-close"></i></button> 
              </span> 
             </div> 
            </div> 
            <div id="divStreamingAreaPlayback{{rows}}{{cols}}" class="video-cointainer text-center row" ng-hide="StartPlayerPlayback{{rows}}{{cols}}"></div> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 

      </div> 
     </div> 
</body> 

вот мой контроллер

app.controller('mainctl', function ($scope,$timeout) { 
$scope.cells =["0"]; 
    //Scopes.store('mainctl', $scope); 
    $scope.divide = function (ar) 
    { 
     $scope.value = ar; 
     $scope.cells = []; 
     for (var i = 0; i < ar; i++) 
     { 
      $scope.cells.push(i + ""); 

     } 
    } 
    $scope.divide1=function() 
    { 
     for(var i=0;i<$scope.value;i++) 
     { 
      for(var j=0;j<$scope.value ;j++) 
      { 
        $scope.index=""+i+j; 
        $("#divPictureBoxPlayback" + $scope.index).attr('class', 'picturebox pictureboxPlayback' + i + j); 
        $("#divPictureBoxPlayback" + index).show(); 
      } 
     } 
    } 

     $scope.onEnd = function(){ 
       $timeout(function(){ 
        alert('all done'); 
        $scope.divide1(); 
      }, 1); 
    } 


}); 

вот моя директива

app.directive("repeatEnd", function($timeout){ 
      return { 
       restrict: "A", 
       link: function (scope, element, attrs) { 
        if (scope.$last) { 
        alert("last element "); 
         scope.$eval(attrs.repeatEnd); 
        } 
       } 
      }; 
     }) 

ответ

0

Кажется, вам не хватает тайм-аута. Вам потребуется тайм-аут в своем коде в директиве:

app.directive("repeatEnd", function ($timeout) { 
     return { 
      restrict: "A", 
      link: function (scope, element, attrs) { 
       if (scope.$last) { 
        $timeout(function() { 
         alert("last element "); 
         scope.$eval(attrs.repeatEnd); 
        }); 

       } 
      } 
     }; 
    }) 

$timeout обеспечит исполняется только тогда, когда нг-повтор заканчивает свою визуализацию. Причина использования $timeout в отношении setTimeout заключается в том, что он будет внутренне вызывать $apply.

+0

app.controller ('mainctl', function ($ scope, $ timeout) {я использую его, но он не работает –

+0

Вам нужно добавить это в директиве. Почему его используют в контроллере? См. Обновленный код. – Jayesh

+0

еще не работает –

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

  • Нет связанных вопросов^_^