如何从模板访问Angular服务对象?

时间:2014-02-19 19:22:43

标签: angularjs angularjs-scope

我有2个控制器:一个用于菜单(我们可以添加/删除的元素的动态列表)和一个用于ng-view。

我需要从ng-view控制器访问菜单元素。 所以,正如我所理解的那样,我应该创建服务,因此菜单对象将在任何控制器中可用,我只需要注入它。

完成。

但是!

我需要渲染这些对象。那么,我应该将菜单元素放在两个控制器的范围内?这很难看:每次更新服务中的元素时,我都应该更新它的值。该死。

所以,目前它适用于rootScope和service,它有处理元素列表更新/添加/删除AJAX的方法。但我觉得这里出了点问题。

有任何建议吗?

1 个答案:

答案 0 :(得分:3)

如果您拥有的只是数据,那么您可以使用值。将Value注入每个控制器并将其存储在作用域中,然后在模板中引用Value的属性。如果您使用服务,您可以做几乎完全相同的事情。我的示例显示了使用每个解决方案的解决方案。

查看此示例: http://plnkr.co/edit/qTbSjnf6Q2FVDurGZhKd

<div ng-controller="MainCtrl">
  <input ng-model="mainVal.value"></input>
  <input ng-model="mainSvcVal.value"></input>
</div>
<div ng-controller="OtherCtrl">
  <input ng-model="otherVal.value"></input>
  <input ng-model="otherSvcVal.value"></input>
</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重新分配给新对象,则会破坏关系。