在指令内创建私有函数

时间:2013-06-08 08:46:58

标签: angularjs

是否可以在指令中创建私有函数?我需要在指令中执行一个相当复杂的过程来填充指令的模板。

像这样(HTML):

<textarea the-result="data">
</textarea>

使用Javascript:

angular
.module("MyModule")
.directive("theResult", [function () {
    return {
        scope: {
            theResult: "="
            // calculatestuff = function(d){ // ... } can't put it here (error)
        },
        template: ' ... '
            + '{{calculatestuff(theResult.someproperties)}}'
            + ' ... '
    }
}])

我可以在哪里放calculatestuff

1 个答案:

答案 0 :(得分:13)

请注意,directive(directiveName, directiveFunction)仅使用directiveFunction返回的内容。您可以在此函数中执行任何操作,例如,定义其他函数:

angular
.module("MyModule")
.directive("theResult", [function () {
    var calculateStuff = function (d) {
        // ...
    };

    return {
        // ...
    }
}]);

但当然,calculateStuff周期内$digest将不再存在,并且不会链接到范围,因此您无法在模板中调用它。如果这确实是您想要做的,请考虑在链接阶段将您的功能放在范围内:

angular
.module("MyModule")
.directive("theResult", [function () {
    return {
        scope: {
            theResult: "="
        },
        template: ' ... '
            + '{{calculatestuff(theResult.someproperties)}}'
            + ' ... ',
        link : function ($scope) {
            $scope.calculateStuff = function (d) {
                // ...
            };
        }
    }
}]);

由于您使用隔离范围,因此无法从指令外部访问此函数。