一尘不染

AngularJS-动态创建指定指令的元素

angularjs

我有这样的设置:

  • 控制器c广播事件e
  • 指令d侦听e,然后e通过append将其写入DOM,并以此创建指定指令的新元素d2

IE浏览器: element.append('<directiveTwo ...>')

  • twoAngular从未调用过指令
  • 当我检查DOM(并调试)时,我看到Controller c和指令d正在执行其工作,并且有新的directiveTwo元素。

什么不见​​了?2动态创建这些元素后需要做什么来触发指令调用?


阅读 241

收藏
2020-07-04

共1个答案

一尘不染

请参阅$compile。您可以类似于以下方式使用此服务:

var newDirective = angular.element('<div d2></div>');
element.append(newDirective);
$compile(newDirective)($scope);

这将执行新元素的编译和链接,并d2付诸行动。

但是,如果您可以某种方式根据其他内置指令(如ng-repeatng-include为您执行编译和链接)重写原始指令,则可能会发现它更简单,更合理。

如果您的指令足够简单,则可以在听到事件时按照添加到数组的方式进行操作,并指定一个模板,例如

<div ng-repeat="evt in recordedEvents">
    <div d2="evt"></div>
</div>
2020-07-04