角度可重用功能

时间:2013-02-13 11:53:46

标签: angularjs

我有几个指令需要在完成它们之后调用相同的函数。此函数需要访问主控制器范围,还需要修改DOM。如何以及在何处声明此函数?

2 个答案:

答案 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()
  • 如果这是一个需要与Angular管理的其他对象交互的组件 - 使用依赖注入并将其注入指令