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 に答える