11

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

像这样的东西(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

4

1 回答 1

14

请注意,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) {
                // ...
            };
        }
    }
}]);

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

于 2013-06-08T09:07:42.597 回答