Angularjs 角度可重用函数
我有几个指令需要在完成它们的工作后调用相同的函数。此函数需要访问主控制器作用域,但也需要修改DOM。如何声明此函数以及在何处声明此函数?如果此函数需要访问控制器的作用域,我将使用指令中可访问的作用域,并将其作为参数传递,如下所示:Angularjs 角度可重用函数,angularjs,Angularjs,我有几个指令需要在完成它们的工作后调用相同的函数。此函数需要访问主控制器作用域,但也需要修改DOM。如何声明此函数以及在何处声明此函数?如果此函数需要访问控制器的作用域,我将使用指令中可访问的作用域,并将其作为参数传递,如下所示: var MyDirective = function() { var linkFn = function(scope, element, attrs) { callAwesomeFn(scope); }; return {
var MyDirective = function() {
var linkFn = function(scope, element, attrs) {
callAwesomeFn(scope);
};
return {
link: linkFn
}
};
现在,把它放在哪里
- 如果这是一个实用程序函数,我会放入一些实用程序名称空间,比如
MyFunctions.callAwesomeFn()
- 如果这是一个需要与Angular管理的其他对象交互的组件,请使用依赖项注入并将其注入到指令中
$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.
};
};
});
感谢Lukasz,将作用域传递给实用函数正是我所做的事情,尽管在angular之外传递作用域以实现我的目标感觉有点脏。我的可重用函数调用另外两个函数;一个用于修改DOM,另一个用于调用控制器函数。我不确定您的第二个建议(DI)是否适合此目的?所有指令是否都在主控制器范围内?换句话说,是在定义主控制器的元素内实现这些指令的所有DOM元素(即
…
)?@bmleite-是的,对于解决方案和示例,它们是+1。很明显,我的可重用函数可以在服务中声明,然后可以传递给需要访问它们的指令。谢谢你!