javascript - 从它自己的链接器函数编译指令

标签 javascript angularjs angularjs-directive

我的指令设置如下:

angular.module('RecursiveDirective', []).
directive('item', function($compile) {
  return {
    restrict: 'E',
    template: '<div><input type="text" ng-model="itemvalue"/></div>',
    link: ItemLinker,
    controller: 'ItemController',
    scope: {}
  }
  
  function ItemLinker(scope, element, attribute) {
    element.on('keyup', function(event) {
      var code = event.keyCode || event.which;
      if(code==13) {
        element.append('<item></item>');
        $compile(element.contents())(scope);
      }
    })
  }
}).
controller('ItemController', function($scope) {
  $scope.itemvalue = "Some Value";
})

现在,当在此指令元素上按下回车键时,我尝试克隆该元素。

我能够克隆该指令,但它没有正确设置范围。从第二次克隆开始,该指令将重置在其克隆中涉及的指令上设置的先前值。

如何克隆该指令,以便它获得自己的新作用域,就像新初始化的指令一样。

Plunker Here - http://plnkr.co

编辑

我必须使用指令创建嵌套结构,即包含另一个指令项的指令项。上述问题是其线性表示。

所以,我不能在这里使用ng-repeat。谢谢

最佳答案

element.on('keyup', function(event) {
  event.stopPropagation();

如果你不停止传播,那么事件就会冒泡,最终每个元素都会被再次编译,每个添加的项目都会被添加多次

关于javascript - 从它自己的链接器函数编译指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35358851/

相关文章:

javascript - .is() 未按预期工作

javascript - Angular : How to handle two-part directive

javascript - 范围包含值,但访问它时,它是未定义的

javascript - 在树状 angularjs 模型中检索对象

javascript - Angular UI - 观察 Popover 模板中输入的值

javascript - 以平面结构从 JSON 中获取每个名称值

javascript - Angular 显示问题......不正确

javascript - js "classes"与经典类

javascript - 在angular2中加载模板时如何调用函数?

javascript - 这是一个伪装成工厂的 AngularJS 服务吗?