角辅助函数在哪里?

gin*_*eer 5 angularjs

我试图用我的指令减少代码重复.我想编写一个生成指令的辅助函数,而不是手动定义它们.将指令定义更改为:

mydirectiveBuilder(function myButton(){
  return {
    scope: {
      toggle: "@pressed"
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

我不知道应该去哪里(除了把它挂在窗外).角度是否为这些方法提供了一席之地?

JB *_*zet 5

Angular不提供任何东西,但angular用作其自己的辅助函数的命名空间.你可以简单地做同样的事情:

var myApp = (function() {
    // private function, not visible from the outside
    function privateFunction() {
        ...
    }

    function mydirectiveBuilder() {
       ...
       // you can use privateFunction here
    }

    return {
        mydirectiveBuilder: mydirectiveBuilder;
    };
})();
Run Code Online (Sandbox Code Playgroud)

在你的指令中:

myApp.mydirectiveBuilder(function myButton(){
    return {
        scope: {
            toggle: "@pressed"
        } 
    };
});
Run Code Online (Sandbox Code Playgroud)


Chr*_*oph 5

您可以执行@JB Nizet建议的操作,或者如果您不喜欢暴露类似于myApp全局范围的想法,您只需将该函数放在某处,然后将所有内容包装在一个闭包中作为构建步骤.

文件:directiveHelpers.js

function myDirectiveBuilder(){
}
Run Code Online (Sandbox Code Playgroud)

文件:someDirective.js

myDirectiveBuilder(function myButton(){
    return {
        scope: {
            toggle: "@pressed"
        } 
    };
});
Run Code Online (Sandbox Code Playgroud)

然后作为构建步骤,您将所有文件连接起来,作为最终构建步骤,您将围绕它放置一个闭包,因此它基本上变为:

文件:app.js

(function(){

    function myDirectiveBuilder(){
    }

    myDirectiveBuilder(function myButton(){
        return {
            scope: {
                toggle: "@pressed"
            } 
        };
    });
})();
Run Code Online (Sandbox Code Playgroud)

Angular本身在整个代码库中使用了这种技术.