当前位置: 首页 > 面试题库 >

AngularJS:链接到使用ng-repeat的指令中的元素

郑高驰
2023-03-14
问题内容

我有一个简单的指令,其中模板在其中使用ng-repeat。我需要运行一些代码来针对ng-
repeat指令创建的某些元素实例化jquery组件。问题是,如果我将此代码放在链接函数中。ng-repeat尚未构建这些元素,因此未实例化任何内容。

App.directive('myDirective', ['$compile', '$timeout', function($compile, $timeout) {
  return {
    scope: {
        domains: '='
    },
    templateUrl: '/app/partials/my_directive.html',
    link: function($scope, element, attributes) {
        element.find('.standard-help').tooltip('destroy');
        element.find('.standard-help').tooltip({placement: 'top', trigger: 'click hover focus'});
    }
  };
}

该模板如下所示。我正在尝试附加

<ul class="media-list domainList">
  <li class="media" style="position:relative;" ng-repeat="domain in domains">
    <a class="domainHeader" href="javascript://">
        <span class="domainHeader">{{domain.tag}}</span>
    </a>
    <div class="media-body" style="margin-left: 52px;">
        <ul class="standardsList">
            <li ng-class="{ standardDisplayed: lessonLayout == 'standards' }" ng-hide="standard.lessons.length == 0" ng-repeat="standard in domain.standards">
                <a href="javascript://" title="{{standard.description}}" ng-show="lessonLayout == 'standards'" class="standard-help pull-right"><i class="icon-question-sign"></i></a>
                <h6 ng-show="lessonLayout == 'standards'">{{standard.tag}}</h6>
                <ul class="lessonsList">
                    <li ng-class="{ lesson: true }" ng-repeat="lesson in standard.lessons" ng-click="onLessonSelected(lesson)">
                        <i class="icon-lock lesson-locked"></i>
                        <div>{{lesson.title}}</div>
                    </li>
                </ul>
            </li>
        </ul>
    </div>
  </li>
</ul>

我尝试使用$ watch()和$
observe()在域更改时注册回调,然后实例化工具提示代码。但是,我似乎无法在适当的时间给我打电话。有什么想法我想念的吗?


问题答案:

我发现,如果创建了我添加到正在创建ng-repeat的元素的另一个指令,则会针对创建的每个元素通知它。然后,我可以简单地$
emit一个事件,其父指令可以监听。在这一点上,它可以执行到那里重复元素的链接。这尤其适用于dom中的多个ng-
repeat,因为我可以按事件类型将它们分开,然后将事件类型传递给新指令。

这是我的指令:

App.directive("onRepeatDone", function() {
    return {
        restrict: 'A',
        link: function($scope, element, attributes ) {
            $scope.$emit(attributes["onRepeatDone"] || "repeat_done", element);
        }
    }
});

这是模板中该新指令的用法:

<ul>
    <li on-repeat-done="domain_done" ng-repeat="domain in domains">...</li>
</ul>

然后在父指令中,我可以执行以下操作:

link: function( $scope, element, attributes ) {
    $scope.$on('domain_done', function( domainElement ) {
        domainElement.find('.someElementInsideARepeatedElement').click(...);
    } );
}


 类似资料:
  • 问题内容: 我花了一段时间试图找到一个优雅的解决方案,而我却找到了一个“可行”的解决方案,它感觉不是最简单或正确的做事方式。 所以,我的问题是…如何动态加载指令!在某些情况下,以下是我希望我能摆脱它的方式!除了模板加载之外,我没有包含路由或其他任何内容,而是为下面的控制器分配了ng- controller。 app.js template.html 任何人都可以提供的建议将不胜感激,如果我做任何明

  • Angularjs ng用div标记重复。。我有一个带有div标记的代码,如图所示。。我想重复整个div,在第二个循环中img src是不同的。。如何使用angularjs中的ng repeat指令执行此操作?

  • 本文向大家介绍AngularJS使用自定义指令替代ng-repeat的方法,包括了AngularJS使用自定义指令替代ng-repeat的方法的使用技巧和注意事项,需要的朋友参考一下 前言 大家都知道对于处理小数量,ng-repeat是非常有用的,但是如果需要处理非常大的数量集,还是采用自定义的方法更好一些。特别是数据大多都是静态的或已预存储好的,这个时候应避免使用ng-repeat指令。 ng-

  • 问题内容: 我想在内容更改时创建具有自定义行为的列表。我尝试为此创建一个指令,但是我对如何将ng-transclude与ng- repeat指令结合起来感到迷茫。有人可以让我走上正轨吗? HTML: Javascript: 我已经在这里工作了一部分 编辑: 条件: 该项目的模板必须在视图中定义,而不是在指令中定义,并且必须有权访问子作用域中的项目属性。理想情况下,我想像在ng-repeat指令中那

  • 本文向大家介绍AngularJS ng-repeat指令及Ajax的应用实例分析,包括了AngularJS ng-repeat指令及Ajax的应用实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS ng-repeat指令及Ajax的应用。分享给大家供大家参考,具体如下: ng-repeat 指令用于循环输出指定次数的 HTML 元素。集合必须是数组或对象。 定义:

  • 问题内容: 我目前正在使用这段代码来呈现列表: 但是,该元素在某些浏览器上引起一些非常小的渲染缺陷。我想知道是否可以在没有div容器的情况下执行ng- repeat,或者通过其他方法来达到相同的效果。 问题答案: 正如Andy Joslin所说,他们正在研究基于注释的ng- repeats,但显然存在太多浏览器问题。幸运的是,AngularJS 1.2添加了对重复的内置支持,而无需使用新的指令和添