javascript - 指令在摘要之后才能访问 ng 重复的子级

标签 javascript angularjs dom

我正在编写一个放置在 ul 元素上的指令,通常带有使用 ng-repeat 消除的 li 子元素。我需要访问这些子项来制作一些副本,但在我的 postLink 函数中,如果我调用 iElement.children(),我将得到一个空列表!更奇怪的是,如果我访问 DOM 属性,即 iElement[0].children,我会得到实际的列表。我可以通过将所有内容包装在 $timeout 中来解决此问题,但当我在代码中进行一些 DOM 操作时,它会产生闪烁。我尝试使用scope.$evalAsync,但 children 像以前一样不在那里。知道发生了什么事吗?我最好奇为什么 DOM 子属性可以工作,但 jqLit​​e .children() 方法却不能。

最佳答案

这里可能发生的情况是,指令在 ng-repeat 完成渲染 View 上的元素之前绑定(bind)并触发。

您可以使用 Controller 中的 $broadcast 事件来解决此问题,并使用 $on 事件监听器在指令内捕获它。

if ($scope.$last === true) {
   $scope.$broadcast('ngRepeatFinished');
 }

以及你的指令内部

scope.$on('ngRepeatFinished', function(){...});

您还可以为 ng-repeat 事件创建指令

.directive('ngRepeatFinished', function () {
  return {
     restrict: 'A',
     link: function (scope, element, attr) {
         if (scope.$last === true) {
                scope.$broadcast('ngRepeatFinished');
        } 
    }
 }
});

根据您的代码层次结构使用 $broadcast 或 $emit。

关于javascript - 指令在摘要之后才能访问 ng 重复的子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26608553/

相关文章:

angularjs - Angular .js : choosing a pre-compiled template depending on a condition

javascript - AngularJS:ngSwipeLeft 上的函数调用

javascript - 具有功能的 Angular ng-show

JavaScript:将子项附加到元素

Java DOM XML 解析::获取元素属性值

javascript - JS : Not been able to add the assertive arrays(dictionary) into their specific parent value

javascript - 使用 JavaScript 的父节点上的委托(delegate)事件冒泡问题

javascript - vue :Property or method "priceFilter" is not defined

javascript - 在 extjs 中为 DOM 操作分配 tpl 值

javascript - 标题复选框检查 gridview 行,但界面显示否则