Dan*_*alo 5 javascript angularjs angular-ui-router
我有下一个问题,我想找到一个解决方案,或者我是否应该像我一样这样做.
我有以下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'
}
}
Run Code Online (Sandbox Code Playgroud)
第一个未命名的视图有一个表,我可以从中选择一行,然后调用一个方法从第二个视图填充双列表.
到目前为止,我已经在同一个控制器中,但控制器变得太大,我决定我必须将它们分开.
该方法来填充双列出" deskLists @ ListCounterparties "中被定义DesksControllerCtrl,但它应该被称为CounterpartiesControllerCtrl,为行选择的情况下,在该控制器.
问题是范围不共享,并且该方法对于未命名的视图是不可访问的.
访问DesksControllerCtrl中的范围我可以看到访问$ parent属性两次我可以到达CounterpartiesControllerCtrl,但我不认为这是理想的事情.
提前致谢.
在多个控制器之间共享数据、方法等,Angular 的方式是创建服务。这意味着,您创建一个服务来保存您的所有数据,另一个服务为多个控制器提供功能。然后,将inject它们放入您的控制器中:
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', function($scope, myGlobalData, myService) {
$scope.myGlobalData = myGlobalData;
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
<p ng-controller="MyCtrlA">
{{myGlobalData.data}}
</p>
<p ng-controller="MyCtrlB">
{{myGlobalData.data}}
</p>
<div ng-controller="MyCtrlA">
<button ng-click="myService.increment()">Increment data in myGlobalData service</button>
</div>
</div>Run Code Online (Sandbox Code Playgroud)