0

То, что я пытаюсь сделать, - это получить объект JSON из запроса $ http, запрошенный внутри контроллера, и создать директиву, которая отображает несколько объектов в объекте JSON в сетка.Обновление шаблона директивы по изменению переменной контроллера - angularjs

Проблема в том, что когда объект прибывает, я должен обработать его в контроллере директивы, чтобы иметь возможность использовать его в шаблоне, как таковой, когда объект JSON изменяется, он не отражается в шаблоне. Как я могу сообщить директиве об изменении объекта и заставить его перезагрузить шаблон?

// The Directive code 
amobile.directive('grid', function() { 
return { 
    restrict: 'E', 
    scope: { 
     break: '=break', 
     source: '=source' 
    }, 
    controller: function($scope) { 
     var source = $scope.source; 
     $scope.final_data = new Array(source.length); 
     if(source){ 
      for(var j=0; j < source.length; ++j){ 
       var total = Math.ceil(source[j]['Division'].length/$scope.break); 
       var data = new Array(total); 
       for (var i = 0; i < total; ++i) { 
        data[i] = source[j]['Division'].slice(i * $scope.break, (i + 1) * $scope.break); 
       } 
       $scope.final_data[j] = data; 
      } 
     } 

    }, 
    templateUrl:'directives/grid.tpl.html', 
    replace: true 
}; 
}); 

//The template 
<div ng-repeat="data in final_data"> 
<div layout="vertical" layout-sm="horizontal" layout-padding class="" ng-repeat="row in data"> 
    <div class="" ng-repeat="item in row"> 
     <div flex style="width:100px"> 
      {{item.name}} 
     </div> 
    </div> 
</div> 

//index.html 
<div ng-controller="DivisionsCtrl as div"> 
    <material-button ng-click="div.go()" class="material-theme-red">Button</material-button> 
<div ng-if="div.data.floors"> 
    <gridy break="3" source="div.data.floors"/> 
</div> 

ответ

0

самым простым решением было бы использовать часам

controller: function($scope) { 
    processData = function() { 
     var source = $scope.source; 
     $scope.final_data = new Array(source.length); 
     if(source){ 
     for(var j=0; j < source.length; ++j){ 
      var total = Math.ceil(source[j]['Division'].length/$scope.break); 
      var data = new Array(total); 
      for (var i = 0; i < total; ++i) { 
       data[i] = source[j]['Division'].slice(i * $scope.break, (i + 1) * $scope.break); 
      } 
      $scope.final_data[j] = data; 
     } 
     } 
    } 
    $scope.$watch('div.data.floors', processData, true) 

}, 
+0

код, так как это не работает. Когда я меняю объект и нажимаю кнопку, чтобы обновить представление, я могу получить новый объект (через Firebug), но представление не обновляется. – iara

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