将工厂注入指令范围内定义的指令链接功能

时间:2015-11-09 14:57:27

标签: angularjs angularjs-directive

我看到了以下问题(以及其他类似问题)并且它解决了尝试将工厂注入指令的链接功能的问题: Injecting service to Directive

我见过的解决方案将链接功能保留在指令的范围内:

angular.module('myapp')
    .directive('myDir', function(myService){
        return {
            restrict: 'E',
            scope: {
                frame: '='
            },
            link: function postLinkFn(scope, elem, attr) {
                myService.doSomething();
            }
        };
    });

但是,我希望能够将postLinkFn分离到.directive范围以外的组织,就像我可以使用控制器一样。

是否可以在将服务注入其中时分离此功能?

2 个答案:

答案 0 :(得分:5)

.directive('myDir', function(myService){
    var deps = { myService: myService };

    return {
        ...
        // myService is available as this.myService inside postLinkFn
        link: angular.bind(deps, postLinkFn)
    };
});

link函数没有使用依赖注入,也没有词法this,绑定注入依赖项this是一个合理的举动。

答案 1 :(得分:1)

当然,您可以将代码放入工厂,然后在整个应用程序中全局引用。

angular.module('myapp').factory('myfactory', myService, function(){
return{
var myfac;
my fac = function (myService){
  var myItem = myService.doSomething;
  return myItem;
};

};
}).
.directive('myDir', function(myService){
    return {
        restrict: 'E',
        scope: {
            frame: '='
        },
        link: myfactory.myItem;
    };
});'

如果您的服务处理异步调用,您需要注意的是使用角度承诺$ q绑定工厂。