在ng中的指令中调用全局函数

时间:2015-11-02 15:18:31

标签: javascript angularjs

我有一个不止一次调用的函数(在不同的指令中)。

那么有没有办法在每个指令中调用一个函数? 一种解决方案是将功能作为服务。 但是服务确实需要一个返回值,不是吗?

 this.changeDesign = function (currentstep) {
             //do something
};

这种方法我多次打电话。

2 个答案:

答案 0 :(得分:2)

您应该考虑避免使用全局变量或在全局范围内添加某些内容。也许它现在有效,但如果你的项目变大,你可能会遇到很多问题。更多信息,例如:https://gist.github.com/hallettj/64478

这是一个例子,你如何使用工厂,你可以注入你的指令(编码风格受John Papa https://github.com/johnpapa/angular-styleguide#factories启发):

(function () {
"use strict";

angular.module('my-app').provider('MyFactory', MyFactory);

    MyFactory.$inject = [];
    function MyFactory() {

        var service = {
            changeDesign: myChangeDesignImpl
        };

        function myChangeDesignImpl() { }

        this.$get = function() {
            return service ;
        };
}

})();

您现在可以将服务注入到这样的指令中:

(function () {
"use strict";

    angular.module('my-app').directive('MyDirective', MyDirective);

    MyDirective.$inject = ["MyFactory"];

    function MyDirective(MyFactory) {
       var directive = {
            restrict: 'E',
            template: "/template.html",
            link: link
        };
        return directive;

        function link(scope, el, attr) {
            MyFactory.changeDesign();
       }
    }
})();

答案 1 :(得分:1)

你可以在指令中做到这一点,你将对你的元素进行细化。

    angular.module('myDesignModule', [])
     .directive('myDesignDirective', function() {
          return {
               link: function(scope, element, attrs, ctrl){
               element.addClass("myClass");
            }

     };)