2

私は AngularJS を試してきましたが、Google の方が優れていると言わざるを得ません。つまり、データ操作は簡単で、angular を習得するのはそれほど難しくありません。今は、angular のソース コードを調べているところです。

{{}}私はdjangoを使っているので、デフォルトの口ひげを別のものに変更したいときに、必要に迫られてこれを始めました。

今、私は別のことをしたいと思っています。つまり、AngularJS ビューの javaScript でコントローラーのデフォルト名を変更する方法です。ちょっとややこしいと思うので、例を挙げて説明しましょう。

<html ng-app>
    <div ng-controller="Controller">
        <input type="text" ng-model="name">
        <h1>{{ name }}</h1>
        <h1> {{ age }}</h1>
    </div>

    <script>
        var Controller = function  ($scope) {
            $scope.name = "Happy Person";
            $scope.age = "30";
        };
    </script>
</html>

ご覧のとおり、ng-controllerasという名前を付けるController場合は、コントローラーに同じ名前を付ける必要があります。これは素晴らしいことですが、私が望むのは、すべての名前に対して、前に追加するようなものです。たとえば、この場合、ng-controllerは と呼ばれます。これControllerで問題ありません。Angular に実行してもらいたいのは、ang_<controller name>代わりに検索することです。たとえば、この場合、angular は のang_Controller代わりに を検索しControllerます。

これをどのように達成しますか?コードのどの部分を変更しますか? これはばかげたことのように思えるかもしれませんが、Angular のソース コードがどのように機能するか、およびそれを好みに合わせて操作する方法をよりよく理解するために、これを実行したいと考えています。

4

1 に答える 1

1

まず第一に、グローバル変数を使用することが煩わしい場合は、強制されているわけではないことに注意してください。大規模なアプリケーションの場合、メソッドを使用することをお勧めします (ドキュメントcontroller()で提案されているように):

angular
    .module('MyModule')
    .controller(
        'MyController',
        [
            '$scope',
            function ($scope) {
                // ...
            }
        ]
    );

とにかく、私見、それを行う最善の方法は、たとえば、独自のディレクティブを作成することですprependingController。その唯一の目標は、クラシックngControllerディレクティブを定義することですが、正しいプレフィックスを使用します。もちろん、そのために AngularJS 定数 ( documentation ) を使用します。

angular
    .module('MyModule')
    .directive(
        'prependingController',
        [
            'CONTROLLER_PREFIX',
            '$compile',
            function (CONTROLLER_PREFIX, $compile) {
                return {
                    link : function ($scope, element) {
                        element
                            .attr(
                                'ng-controller',
                                CONTROLLER_PREFIX + element.attr('prepending-controller')
                            )
                            .removeAttr('prepending-controller');

                        $compile(element)($scope);
                    },
                };
            }
        ]
    );

Fiddle

于 2013-08-01T16:54:10.310 に答える