我正在编写一个 AngularJS 应用程序,其中一个数组(活动工作订单列表)用于许多不同的控制器。$http
使用对服务器的调用定期刷新此数组。为了分享这些信息,我将数组放在了服务中。
服务中的数组一开始是空的(或者,出于调试目的,使用 dummy values ["A", "B", "C"]
),然后查询服务器以初始化列表。不幸的是,我所有的控制器似乎都绑定到数组的预查询版本——在我的应用程序中,我看到的只是我初始化数组的虚拟值。
我的目标是以这样的方式将数组绑定到我的控制器中,这样 Angular 会意识到数组已更新,并导致我的视图在数组更改时重新呈现,而无需引入 a$watch
或强制我的$http
调用等待结果.
问题:如何将 wo_list 数组从我的服务绑定到我的控制器,以便 Angular 将其视为模型的常规可观察部分?
我有:
包含数组的服务和用于从服务器初始化和定期更新数组的刷新函数(我知道这是通过
console.log()
消息工作的)。出于调试目的,我使用占位符“A”、“B”和“C”来初始化数组——真正的工作指令是五位数的字符串。angular.module('activeplant', []). service('workOrderService', function($http) { wo_list = ["A", "B", "C"]; //Dummy data, but this is what's bound in the controllers. refreshList = function() { $http.get('work_orders').success(function(data) { wo_list = data; console.log(wo_list) // shows wo_list correctly populated. }) } refreshList(); return { wonums: wo_list, // I want to return an observable array here. refresh: function() { refreshList(); } } })
一个控制器,它应该绑定到 workOrderService 中的数组,以便我可以显示工作订单列表。我在两种不同的尝试中绑定了服务和服务返回的数组,以使其正常工作。
function PlantCtrl($scope, $http, workOrderService) { $scope.depts = [] $scope.lastUpdate = null $scope.workorders = workOrderService $scope.wonums = workOrderService.wonums // I want this to be observable $scope.refresh = function() { $scope.workorders.refresh() $http.get('plant_status').success(function(data) { $scope.depts = data; $scope.lastUpdate = new Date() }); } $scope.refresh() }
一个视图模板,它遍历工厂控制器中的绑定数组以打印工作订单列表。我做了两次尝试让它工作,最终版本只有一次 ul 元素。
<div ng-controller="PlantCtrl"> <div style='float:left;background-color:red' width="20%"> <h2>Work Orders</h2> <ul> <li ng-repeat="wonum in workorders.wonums"><a href=""> {{wonum}} </a></li> </ul> <ul> <li ng-repeat="wonum in wonums"><a href=""> {{wonum}} </a></li> </ul> </div> </div>
其他几个视图/控制器对(此处未显示)也绑定和迭代工作订单数组。