Как получить доступ к объекту службы Angular из шаблона?

У меня есть 2 контроллера: один для меню (динамический список элементов, которые мы можем добавить/удалить), и один для ng-view.

Мне нужно получить доступ к элементам меню из контроллера ng-view. Поэтому, насколько я понимаю, я должен создать сервис, поэтому объекты меню будут доступны в любом контроллере, мне нужно просто его ввести.

Готово.

Но!

Мне нужны эти объекты в рендеринге. Итак, я должен поместить элементы меню в оба контроллера? Это уродливо: я должен обновлять его значение каждый раз, когда я обновляю элементы в службе. Черт.

Итак, в настоящее время он работает с rootScope и сервисом, который имеет метод обработки списка элементов update/add/remove AJAX. Но я думаю, что здесь что-то не так.

Любые советы?

1 ответ

Если у вас есть данные, вы можете использовать значение. Внесите значение в каждый из ваших контроллеров и сохраните его в своей области, а затем укажите свойство значения в своем шаблоне. Если вы пользуетесь Сервисом, вы можете сделать почти то же самое. В моем примере показано одно решение, использующее каждый.

См. этот пример: http://plnkr.co/edit/qTbSjnf6Q2FVDurGZhKd

<div ng-controller="MainCtrl">
 
 
</div>
<div ng-controller="OtherCtrl">
 
 
</div>
var app = angular.module('plunker', []);
app.value('MyValue', {value: "Hello There"});
app.service('MyService', function() {
 this.myData = {
 value: "Goodbye"
 }
});
app.controller('MainCtrl', function($scope, MyValue, MyService) {
 $scope.mainVal = MyValue;
 $scope.mainSvcVal = MyService.myData;
});
app.controller('OtherCtrl', function($scope, MyValue, MyService) {
 $scope.otherVal = MyValue;
 $scope.otherSvcVal = MyService.myData;
});

Следует отметить, что если вы переназначаете MyService.myData на новый объект, это нарушит связь.

licensed under cc by-sa 3.0 with attribution.