【问题标题】:AngularJS - Dynamically creating elements that specify directivesAngularJS - 动态创建指定指令的元素
【发布时间】:2013-11-17 00:04:50
【问题描述】:

我有这样的设置:

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

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

  • Angular 永远不会调用指令 two
  • 当我检查 DOM(和调试)时,我看到控制器 c 和指令 d 正在执行它们的工作,并且我有新的 directiveTwo 元素。

缺少什么?动态创建这些元素后需要做什么来触发指令2 调用?

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案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>
    

    【讨论】:

    • 谢谢你的替代方案,只是让它点击一下我应该如何做到这一点。
    • 方法2:消除你轻松控制范围的能力,并且ng-repeat非常繁重,在我们的办公室我们正在积极删除和重构使用ng-repeat/ng-click/ng-keypress的模板等等... dom 操作和元素处理程序。
    • 以防万一有人需要这种方法的帮助,我首先合并成一行,但必须定义范围和 $compile 函数:define $compile:window.$compile = angular.element(document.body).injector().get('$compile');compile html:$(elem).append($compile(angular.element(html))(angular.element(document.body).scope()));不是最优雅的,但它适用于我们的用例。
    猜你喜欢
    • 2017-06-02
    • 2013-10-21
    • 2017-08-16
    • 2017-05-27
    • 2015-04-12
    • 2016-12-16
    • 2013-10-07
    • 2017-05-20
    • 2016-11-28
    相关资源
    最近更新 更多