5

我正面临 AngularJS、服务和范围的“问题”。

这不是一个真正的问题(我找到了几种让它工作的方法),但我想知道我是否在做正确的事情,或者我正在做的事情是否会导致将来出现问题

我有一个保存一些全球数据的服务;该服务有两种方法: getData() refreshData()

refreshData 触发一些工作(休息调用等),并在不同控制器内的精确点被调用,以响应用户操作(按钮点击等)。

(显然)调用 getData 来取回数据。

在控制器中,我应该如何使用它来访问数据并将其放在范围内,以便可以从视图中访问它?

备选方案 1:

controller('MyController', function ($scope, myService) {   
     $scope.data = myService.getData();
     //use data in functions and in the view, ex: ng-hide="data.forbidden"

备选方案 2:

controller('MyController', function ($scope, myService) {   
     $scope.data = function() { return myService.getData(); }
     //use data() in functions and in the view, ex: ng-hide="data().forbidden"

备选方案 3:

controller('MyController', function ($scope, myService) {   
     $scope.forbidden = function() { return myService.getData().forbidden; }
     //... one function for each data.member used in this view
     //usage in the view: ng-hide="forbidden()"

备选方案 4:使用 $apply 或 $watch

我目前正在使用第二种方法,因为即使没有创建新控制器它也可以工作(考虑同一页面中的不同部分,使用不同的控制器)。

这有什么意义吗?还是有更好的方法?

4

1 回答 1

4

这取决于使用情况。当您想在页面加载或控制器初始化时填充数据时,可能会使用替代 1 或 3。当您想通过单击按钮或其他一些操作来触发数据刷新时,可以使用备选方案 2。当您希望数据加载由其他数据模型上的数据更改驱动时,可以使用备选方案 4。因此,我认为您发布的每个替代方案在正确的情况下都是有意义的。

于 2013-07-26T13:32:44.800 回答