从父控制器的指令中调用函数

时间:2018-09-12 08:34:48

标签: angularjs

我有一个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的指令中调用方法。

0 个答案:

没有答案