2

「名前」属性を持つすべての要素とディレクティブの中に属性 ng-model を追加しようとしていますが、何らかの理由で、リンク関数のトランスクルード関数を使用すると、ディレクティブはその ng-model を削除します追加すると、角度がエラーをスローします:

Error: [$compile:ctreq] Controller 'ngModel', required by directive 'someDirectiveThatRequiresNgModel', can't be found!

クロム開発者ツールでDOMを見ると、次のコードを使用して追加した後、ng-modelが削除されます(ディレクティブ要素から削除されますが、単純な入力要素からは削除されません):

compile: function(element, attrs){
    return {
         pre: function ($scope, $element, $attrs, ctrl, transclude) {


        },
         post: function($scope, $element, $attrs, ctrl, transclude){
             var initializePromise = $scope.__initialize();

             initializePromise.then(function(){
                transclude($scope, function (clone, scope) {
                    var inputs = clone.find('[name]');

                    $.each(inputs, function (index, input) {
                        var ainput = angular.element(input);

                        ainput.attr('ng-model', 'someValidScopeAttribute');

                        $compile(ainput)($scope);

                    });
                    $element.prepend(clone);
                });
             });
         }
     }
},

ディレクティブが Transclude 関数内でコンパイルされると、属性が削除されるのはなぜですか?、必要なものをどのように達成できますか?

4

0 に答える 0