我正面临着AngularJS,服务和范围的“问题”。
这不是一个真正的问题(我发现有几种方法可以让它发挥作用),但我想知道我是做正确的事情,还是我正在做的事情会导致将来出现问题< / p>
我有一个包含一些全球数据的服务;该服务有两种方法: 的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
我目前正在使用第二种方法,因为它甚至在未创建新控制器时也能工作(考虑同一页面中不同控件的不同部分)。
它有意义吗?或者有更好的方法吗?
答案 0 :(得分:4)
这取决于用法。当您要在加载页面或初始化控制器时填充数据时,可以使用备选方案1或3。如果要通过单击按钮或其他操作来触发数据刷新,可以使用备选方案2。当您希望数据加载由其他数据模型上的数据更改驱动时,可以使用备选方案4。因此,我认为您发布的每个替代方案都适用于正确的方案。