我有幾個指令需要在完成他們的事情後調用相同的函數。該功能需要訪問主控制器範圍,但也需要修改DOM。應該如何以及在哪裏宣佈這個功能?角度可重用函數
Q
角度可重用函數
2
A
回答
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.
};
};
});
+0
+1爲解決方案和示例。很明顯看到我的可重用函數如何在服務中聲明,然後可以傳遞給需要訪問它們的指令。感謝fastreload! – supermasher 2013-02-14 11:06:13
-1
如果此功能需要訪問控制的範圍,我會用這是在指令訪問的範圍,並把它作爲PARAM,就像這樣:
var MyDirective = function() {
var linkFn = function(scope, element, attrs) {
callAwesomeFn(scope);
};
return {
link: linkFn
}
};
現在,把它放在哪裏?
- 如果這是效用函數,我會放一些公用事業命名空間,就像
MyFunctions.callAwesomeFn()
- ,如果這是一個需要與角管理的其他對象進行交互的組件 - 使用依賴注入,注入指令
+0
感謝Lukasz,把範圍傳遞給一個實用函數正是我所做的,雖然它感覺有點髒,通過角度以外的範圍來實現我的目標。我的可重用函數調用另外兩個函數;一個修改DOM,另一個調用控制器功能。我不確定您的第二個建議(DI)是否適合此目的? – supermasher 2013-02-13 14:38:51
是否所有指令都放在主控制器範圍之下?換句話說,所有在定義主控制器的元素(即'
@bmleite - 是的,他們是。 – supermasher 2013-02-15 15:22:41