我有一个ActivityTimelineItemComponent
类,用于呈现模板。在模板中,我有:
<div class="activity-header" timeline-item ng-click="vm.toggle($event);">
并且:
<div ng-repeat="activity in vm.activities.items track by activity.id">
<div ng-include="'activity.type + '.html'" id="{{activity.type}}" onload="vm.templateFinishedLoading()"></div>
</div>
您可以看到ng-include上有一个onload
调用。它调用一个方法:
public templateFinishedLoading() {
this.templatesFinishedLoading += 1;
if (this.templatesFinishedLoading === this.activities.items.length) {
clickedItem$.onNext('');
this.$rootScope.$broadcast('templatesFinishedLoading');
}
}
此方法检查所有包含项是否都已完成。一旦完成,就执行$broadcast
。广播通过timeline-item
指令(在活动模板中:
scope.$on('templatesFinishedLoading', () => {
if (attr.$$element[0].parentElement === clickedElement) {
setTimeout(() => {
collapsedStatus = true;
toggleHeightOfItem(timelineItem);
}, 650);
}
});
然后在指令中调用方法。
问题是我的应用程序中最多可以进行100多个活动。 timeline-item
指令的100个实例也是如此。如果我使用广播方法,则会广播到每个指令实例。
因此,我希望可以从父控制器ActivityTimelineItemComponent
的指令中调用方法。