在创建仪表板应用程序时,我遇到了需要同时拥有AngularJS
控制器和服务的情况。
在主(第一)页面,我mainController
(布局无),layoutController
与方法loadLayoutFromAPI()
和saveLayoutToAPI()
绑定到按钮。
现在,在辅助(第二),只有secondController
而不是layoutController
。我需要直接从layoutController
使用secondController
中的方法,我不希望在HTML中插入ng-controller
指令(而是通过依赖注入将其放入secondController
)。
MainPage(1st):
<div ng-controller="mainController">
<!-- some other code -->
<div ng-controller="layoutController as ctrl">
<a href="#" ng-click="ctrl.loadLayoutFromAPI()">Load</a>
<a href="#" ng-click="ctrl.saveLayoutToAPI()">Save</a>
</div>
</div>
SecondaryPage(2nd):
<div ng-controller="secondController">
<!-- some other code -->
</div>
我试图寻找这个问题,但根本找不到答案。
问题:我应该如何使用同一段代码(方法save()
和load()
)作为控制器(ng-controller
),其他时间作为服务(包括在dependency-injection
)?
由于
JS Bin根据要求
答案 0 :(得分:5)
不要直接从其他控制器使用其他控制器的方法......这就是服务的原因。控制器只能与视图互动!
如果您想在控制器,指令或其他任何服务,工厂和提供商所需的内容之间进行通信。在构建任何应用程序时,您总是将常用功能抽象为某种服务
例如:
//Just an APP def
var app = angular.module('dashApp', []);
//LayoutController
app
.controller('layoutController', ['CtrlService', function(ctrlService){
this.saveLayoutToAPI = function(){
ctrlService.save();
}
this.loadLayoutFromAPI = function(){
ctrlService.load();
}
}]);
//Main Controller
app
.controller('mainController', function(){
//no work with layout at all
});
//Secondary controller
app
.controller('secondController', ['CtrlService', function(ctrlService){
this.save = function(){
ctrlService.save();
}
this.load = function(){
ctrlService.load();
}
}]);
app
.service('CtrlService', function () {
var obj = {
save: function () {
console.log('Layout saved.');
},
load: function () {
console.log('Layout loaded.');
}
}
this.save = obj.save;
this.load = obj.load;
});
答案 1 :(得分:1)