在角度指令中何处放置辅助函数?

时间:2014-09-18 15:58:08

标签: angularjs angularjs-directive

我创建了一个简单的指令:

angular.module("foo").directive('bar',function(){
    return {
        ...
        template:
            '<div> \
                <div ng-hide="param1.length == 0 && param2...">...</div> \
                <input ng-show="param1.length == 0 && param2..." .../> \
             </div>',
        scope: {
            param1: '=',
            param2: '='
        }
    };
});

但是模板中有一个复制的复杂逻辑,所以我想把它提取到一个函数中,然后从模板中调用该函数。我在哪里可以放这样的功能,我该如何调用它?我是否必须创建专用控制器?

3 个答案:

答案 0 :(得分:5)

在链接功能中:

return {
    ...,
    template: '<div><div ng-hide="foo()">...</div></div>',
    link: function(scope) {
        scope.foo = function() {
            return scope.param1.length == 0 && ...;
        };
    }
};

答案 1 :(得分:0)

您使用声明服务以角度来实现此目的。来自angular docs(https://docs.angularjs.org/guide/services

  

Angular服务是连接在一起的可替代对象   使用依赖注入(DI)。您可以使用服务来组织和   在您的应用中共享代码。

答案 2 :(得分:0)

这是一个简单,紧凑且易于理解的方法 首先,在你的js中添加一项服务。

app.factory('Helpers', [ function() {
      // Helper service body

        var o = {
        Helpers: []

        };

        // Dummy function with parameter being passed
        o.getFooBar = function(para) {

            var valueIneed = para + " " + "World!";

            return valueIneed;

          };

        // Other helper functions can be added here ...

        // And we return the helper object ...
        return o;

    }]);

然后,在您的控制器中,注入您的帮助程序对象并使用任何可用的函数,如下所示:

app.controller('MainCtrl', [

'$scope',
'Helpers',

function($scope, Helpers){

    $scope.sayIt = Helpers.getFooBar("Hello");
    console.log($scope.sayIt);

}]);