我有几个指令需要在完成它们之后调用相同的函数。此函数需要访问主控制器范围,还需要修改DOM。如何以及在何处声明此函数?
答案 0 :(得分:7)
您应该使用服务,服务可以访问$rootScope
,虽然最好将DOM修改保持在指令级别,在某些情况下您可以使用它。
angular.module("myModule", [])
.factory("MyService", function ($rootScope) {
return {
myFunction: function () { // do stuff here }
}
})
.directive("MyDirective", function (MyService) {
return {
link: function (scope, iElement, iAttrs) {
// try do keep dom modification here, you have access to MyService,
// let it do the algorithm and try to keep dom modification here.
// PS: you can also inject $rootScope to directives.
};
};
});
答案 1 :(得分:-1)
如果此函数需要访问Controller的范围,我将使用指令中可访问的范围并将其作为参数传递,如下所示:
var MyDirective = function() {
var linkFn = function(scope, element, attrs) {
callAwesomeFn(scope);
};
return {
link: linkFn
}
};
现在,把它放在哪里?
MyFunctions.callAwesomeFn()