微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用自定义控制器在不同视图中共享范围

我有一个问题,我想找到一个解决方案,或者我是否应该像我一样这样做.

我有以下ui-router配置:

$stateProvider.state('ListCounterparties',{
    url:"/counterparties",data: { NavMenuItem : 'Counterparties / Desks' },views: {
        '' : {
            templateUrl:"./app/module_Counterparties/templates/ListCounterparties.html",controller:"CounterpartiesControllerCtrl"
        },'deskLists@ListCounterparties' : {
            templateUrl : './app/module_Counterparties/templates/DesksDualListTemplate.html',controller:'DesksControllerCtrl'
        }
}

一个未命名的视图有一个表,我可以从中选择一行,然后调用一个方法从第二个视图填充双列表.

到目前为止,我已经在同一个控制器中,但控制器变得太大,我决定我必须将它们分开.

在’deskLists @ ListCounterparties’中填充双列表的方法在DesksControllerCtrl中定义,但它应该在CounterpartiesControllerCtrl中调用,因为行选择的事件在该控制器中.

问题是范围不共享,并且该方法对于未命名的视图是不可访问的.

访问DesksControllerCtrl中的范围我可以看到访问$parent属性两次我可以到达CounterpartiesControllerCtrl,但我不认为这是理想的事情.

提前致谢.

最佳答案
在多个控制器之间共享数据,方法等Angular方式将是创建服务.这意味着,您创建了例如保存所有数据的服务,另一个为多个控制器提供功能的服务.然后,只需将它们注入控制器:

var myApp = angular.module('myApp',[]);

myApp.factory('myglobalData',function() {
  return {
    data: 1
  };
});

myApp.factory('myService',function(myglobalData) {
  return {
    increment: function() {
      myglobalData.data++;
    }
  };
});

myApp.controller('MyCtrlA',function($scope,myglobalData,myService) {
  $scope.myglobalData = myglobalData;
  $scope.myService = myService;
});

myApp.controller('MyCtrlB',myService) {
  $scope.myglobalData = myglobalData;
});

                                

原文地址:https://www.jb51.cc/js/428955.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐