我有一个两个控制器将使用的功能,而不是它们两个具有相同功能的相同源代码,我想在一个地方只注入控制器参数(或者可能是控制器本身{{ 1}})。这三个可能存在于三个独立的文件/模块中。
this
这是最好的方法吗?如果我的控制器(如.controller('FirstCtrl', function() {
this.search = function(this) {
find(this);
};
});
.controller('SecondCtrl', function() {
this.seek = function(this) {
find(this);
};
});
var find = function(controller) {
.
.
.
};
或$http
)中有服务,而函数$scope
将取决于这些服务,那该怎么办?如何将这些角度特定服务注入到未在AngularJS模块中定义的普通JavaScript函数?
答案 0 :(得分:1)
您可以添加服务:
.factory('find', [ function() {
return function(controller, scope) {
// ...
};
}]);
将其注入控制器:
.controller('FirstCtrl', ['find', function(find) {
this.search = function(this) {
find(this);
};
}]);
.controller('SecondCtrl', ['find', function(find) {
this.seek = function(this) {
find(this);
};
}]);
答案 1 :(得分:1)
有几种方法可以做到;一个可能是:
.factory("findMixin", function() {
return {
find: function() {
// your implementation; `this` will be the controller
}
};
})
.controller("SomeCtrl", ["$scope", "findMixin", function($scope, findMixin) {
angular.extend(this, findMixin);
// here `this`, i.e. the controller, has received the methods from the mixin
...
})
如果您希望将angular.extend
混合到范围中,则可以将同样的原则($scope
)应用于find
。