控制器使用相同的功能

时间:2014-10-21 06:24:06

标签: javascript angularjs

我有一个两个控制器将使用的功能,而不是它们两个具有相同功能的相同源代码,我想在一个地方只注入控制器参数(或者可能是控制器本身{{ 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函数?

2 个答案:

答案 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