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

Rob*_*ian 41 angularjs angularjs-directive

我有这样的设置:

  • 控制器c广播事件e
  • Directive 通过append d监听ee写入DOM,并在此过程中创建指定指令的新元素d2.

IE: element.append('<directiveTwo ...>')

  • twoAngular永远不会调用指令
  • 当我检查DOM(和调试)时,我看到Controller c和指令d正在完成他们的工作,我有新的directiveTwo元素.

缺什么?2在动态创建这些元素之后需要做些什么才能触发指令调用?

And*_*ger 90

$compile.您可以使用此服务:

var newDirective = angular.element('<div d2></div>');
element.append(newDirective);
$compile(newDirective)($scope);
Run Code Online (Sandbox Code Playgroud)

这将执行新元素的编译和链接,并设置d2为动作.

但是,如果您可以按照其他内置指令(ng-repeatng-include将为您执行编译和链接)的方式重写原始指令,您可能会发现它更简单,更有棱角.

如果你的指令足够简单,它可以在听到你的事件时按照添加到数组的方式做一些事情,并指定一个类似的模板

<div ng-repeat="evt in recordedEvents">
    <div d2="evt"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 你的另一个想法让我大吃一惊:P (5认同)
  • 方法2:消除你的容易控制范围,ng-repeat非常重,在我们的办公室我们正在积极地删除和重构使用ng-repeat/ng-click/ng-keypress等的模板...来控制dom元素处理程序. (2认同)