2015-01-25 3 views
0

У меня есть один контроллер и два вида.AngularJS: Область в нескольких представлениях не обновляется

ClustersContorller

angular.module('app.controllers').controller('ClustersController', [ 
    '$scope', 'ClustersService', function($scope, ClustersService) { 
    ClustersService.getAll().success(function(data) { 
     $scope.clusters = data; 
    }); 
    $scope.$on('cluster:added', function(event, data) { 
     ClustersService.createNew(data).then(
     function(res) { 
      $scope.clusters.push(res.data); 
     }, 
     function(res) { 
      console.log('Unable to create a cluster!'); 
     } 
    ); 
    }); 
    } 
]); 

Теперь один вид работает прекрасно, когда я отправить запрос HTTP и обновить переменную области действия, нажав на $scope.clusters:

<section class="clusters"> 
    <h2 ng-show="clusters.length < 1">You have no clusters :(</h2> 
    <a class="btn btn-default btn-block" data-ng-repeat="cluster in clusters" data-template="{{cluster.templateId}}"> 
    <h2> {{ cluster.name }} </h2> 
    <p> {{ cluster.description }} </p> 
    </a> 
    <add-cluster-modal></add-cluster-modal> 
</section> 

Но другой вид, который связан с этим контроллером не обновляется scope.clusters в привязках:

<ul class="dropdown-menu" role="menu" data-ng-controller="ClustersController"> 
    <li data-ng-repeat="cluster in clusters"> 
    <a> {{cluster.name}} </a> 
    </li> 
</ul> 

Просто чтобы быть ясно, что первый вид связан с $routeProvider и второй из них является частью шаблона включены непосредственно в приложение основной HTML файл по ng-include=" 'templates/partials/header.html' "

Пожалуйста, не стесняйтесь спросить меня, если что-то путает. ..

ответ

1

Угловые контроллеры не являются одноточиями, и каждый раз, когда вы используете ng-controller, вы создаете новый экземпляр этого контроллера (см. documentation). Вот почему ваш второй контроллер не отображает данные - его область не знает о масштабах других экземпляров.

Вы можете либо сохранить данные модели под $rootScope, либо создать в своем контроллере механизм событий, который будет информировать другие экземпляры об изменении данных.

+0

спасибо + yarons –

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