1

だから私は次のような要素を作成できるようにしたい:

<div my-directive></div>

my-directiveそして、従属指令を追加したいと思います。

<div my-directive subordinate-directive></div>

現在、コンパイル時にこれらのディレクティブを追加していますが、再実行されません。ディレクティブのテンプレートから生成された子要素では、ディレクティブが実行される前に子テンプレートに追加する可能性が高いため、好きなことを行うことができます。

例: http://plnkr.co/edit/6y6Ebzqf1gLkTBEUcKfi?p=preview

4

1 に答える 1

1

問題は、my-directiveが処理されるまでに、指令の収集フェーズが終了し、要素を変更しても新しいコンパイルがトリガーされないことです。

他のすべてのディレクティブを追加した後、手動でコンパイル フェーズを再度トリガーする必要があります。 plunkerを参照してください。

app.directive("queue", [ '$compile', function($compile) {
  var directiveDefinitionObject;
    directiveDefinitionObject = {
      scope: {},
      controller: [
        '$scope', function($scope) {
          $scope.entries = [{name: 1}, {name: 2}, {name: 3}];
        }
      ],
      template: $("#entry").html(),
      compile : function(tElement, tAttrs, transclude) {
        var compiler;

        //All children related directives go here since the template hasn't been
        //appended yet in the post link function when we re-compile
        tElement.children().attr('ng-repeat', 'entry in entries');

        compiler = {
          pre : function(scope, iElement, iAttrs, controller) {
          },
          post : function(scope, iElement, iAttrs, controller) {
            if (iElement.attr('can-do-thing-i-define') === undefined) {
              var c = tElement.clone();

              c.attr('can-do-thing-i-define', '');

              $compile(c)(scope);

              iElement.replaceWith(c);
            }
          }
        };
        return compiler;
      }
    };
    return directiveDefinitionObject;
}]);
于 2013-03-18T20:36:30.627 に答える