加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在AngularJS中控制器之间共享可观察的数组引用

发布时间:2020-12-17 09:27:54 所属栏目:安全 来源:网络整理
导读:我正在编写一个AngularJS应用程序,其中一个数组(活动工作单的列表)用于许多不同的控制器.此数组将使用对服务器的$http调用定期刷新.为了分享这些信息,我把数组放在一个服务中. 服务中的数组开始为空(或为了调试目的,使用虚拟值[“A”,“B”,“C”]),然后查询
我正在编写一个AngularJS应用程序,其中一个数组(活动工作单的列表)用于许多不同的控制器.此数组将使用对服务器的$http调用定期刷新.为了分享这些信息,我把数组放在一个服务中.

服务中的数组开始为空(或为了调试目的,使用虚拟值[“A”,“B”,“C”]),然后查询服务器来初始化列表.不幸的是,我的所有控制器似乎都绑定到阵列的预先查询的版本 – 在我的应用程序中,我看到的是我初始化了数组的虚拟值.

我的目标是将数组绑定到我的控制器中,这样Angular将意识到数组已被更新,并导致我的视??图在数组更改时重新呈现,而不必引入$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>

>其他几个视图/控制器对(这里未显示)也绑定和迭代工作数组.

看看这是否解决了你的问题:

代替wo_list = data,填充相同的数组.当您将一个新的数据数组分配给wo_list时,您将失去与旧数组的绑定 – 即,您的控制器可能仍然绑定到先前的数据数组.

wo_list.length = 0
for(var i = 0; i < data.length; i++){
    wo_list.push(data[i]);
}

有关更多信息,请参阅https://stackoverflow.com/a/12287364/215945.

更新:angular.copy()可以/应该使用:

angular.copy(data,wo_list);

当将目的地提供给copy()方法时,它将首先删除目标的元素,然后从源中复制新的元素.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读