我看到了以下问题(以及其他类似问题)并且它解决了尝试将工厂注入指令的链接功能的问题: 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范围以外的组织,就像我可以使用控制器一样。
是否可以在将服务注入其中时分离此功能?
答案 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绑定工厂。