javascript - 获取对在 ng-repeat 中创建的元素的 JavaScript 引用

标签 javascript angularjs angularjs-ng-repeat

我正在尝试获取 <div>ng-repeat 内创建这样我就可以在里面添加由第三方库生成的内容。

尝试 1:

<div ng-init="init()">
  <div ng-repeat="item in items">
    <div id="{{ item.id }}"></div>
  </div>
</div>

$scope.init = function() {
  for (var i in items) {
    var element = document.getElementById(items[i].id);
    generateInnerHtml(element);
  }
};

尝试 2:

<div ng-init="init()">
  <div ng-repeat="item in items">
    <div id="{{ item.id }}" ng-init="addContent(item.id)"></div>
  </div>
</div>

$scope.addContent = function(id) {
  var element = document.getElementById(id);
  generateInnerHtml(element);
};

尝试 3:

<div ng-init="init()">
  <div ng-repeat="item in items">
    <div id="{{ item.id }}" ng-init="addContent(this)"></div>
  </div>
</div>

$scope.addContent = function(element) {
  generateInnerHtml(element);
};

对于所有三次尝试,element始终为 null 或未定义。怎么了?

最佳答案

在尝试 #1 和 #2 中,您的函数在处理所有 Angular 指令之前运行,因此 divid 尚未定义。

您可以将您的代码包装在 $timeout() 中以强制它等待,直到正确生成 DOM:

angular.module("myApp", [])
  .controller("myController", function($scope, $timeout) {
    $scope.addContent = function(id) {
      $timeout(function() {
        var element = document.getElementById(id);
        generateInnerHtml(element);
      }, 0);
    };

})

在此处查看演示:https://jsfiddle.net/1w5ntajm/ .

关于javascript - 获取对在 ng-repeat 中创建的元素的 JavaScript 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402542/

相关文章:

angularjs - 如何比较自定义指令内 ng-show 中的字符串值?

javascript - 单击单选按钮更改范围输入值

javascript - 单击时未定义 C# razor 对象

angularjs - 我们可以在 Angular Material Design 中拖放 md-list 项目或 md-cards

javascript - 如果 Javascript 对象中存在,则绑定(bind) AngularJS 复选框

javascript - AngularJS:指令重复,作为属性而不是元素

javascript - 从 javascript 中的字符串数组创建唯一 ID?

Javascript 使用 IE9 创建事件

javascript - 模型更新后, Angular 过滤器不会更新 View

javascript - Angular 显示来自 json 的单个记录