我想使用vm convention控制器编写。问题是我面临的是继承,例如假设我有以下内容:
基本控制器:
angular.module('app')
.controller('BaseCtrl', BaseCtrl);
function BaseCtrl() {
var vm = this;
vm._privateVar = 1;
}
BaseCtrl.prototype.foo= function() {
console.log('foo')
};
儿童控制器:
angular.module('app')
.controller('ChildCtrl', ChildCtrl);
function ChildCtrl() {
var vm = this;
}
ChildCtrl.prototype.goo= function() {
console.log('goo')
};
注意:
我只能在ChildCtrl函数中访问注入:
function ChildCtrl(/*I can inject here only*/) {
var vm = this;
}
此外,BaseCtrl不是全局类/函数/对象。 在控制器功能之外注入控制器服务是否有任何意义?
我应该如何ChildCtrl
继承BaseCtrl
形式?
谢谢!
答案 0 :(得分:1)
最终我做了以下,
//get the injector.
var injector = angular.injector(['app']);
//get the service.
var $controller = injector.get('$controller');
var BaseCtrl = $controller('BaseCtrl');
angular.module('app')
.controller('ChildCtrl', ChildCtrl);
function ChildCtrl() {
var vm = this;
BaseCtrl.call(this);
}
ChildCtrl.prototype = Object.create(BaseCtrl);
正如您所看到的,我已经注入了$controller
服务,并使用了BaseCtrl。
我知道这很丑陋,我很乐意听到更好的建议;
答案 1 :(得分:0)
function ChildCtrl() {
var vm = this;
BaseCtrl.call(this);
}
ChildCtrl.prototype = Object.create(BaseCtrl);
使用这种方法,BaseCtrl需要是全局的。您可以使用mixin获得类似的代码重用,并且它不会使用全局但您不会从基础原型中获得任何东西。 e.g:
var BaseCtrlMixinService = function() {
this.myValue = 123;
this.myFunc = function() {
console.log(this.myValue);
}
}
angular.module('app').service('baseCtrlMixin', BaseCtrlMixinService);
function ChildCtrl(baseCtrlMixin) {
var vm = this;
angular.extend(this, baseCtrlMixin);
}
angular.module('app').controller('ChildCtrl', ChildCtrl);