gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:45:03 32 4
gpt4 key购买 nike

我有一个简单的指令,模板在其中使用 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-repeats 来说,因为我可以通过事件类型将它们分开,这些事件类型将传递给新指令。

这是我的指令:

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(...);
} );
}

关于javascript - AngularJS:链接到使用 ng-repeat 的指令中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17643681/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com