Я действительно не знаю, что вы хотите реализовать и что означает «ленивая загрузка» ... Вы хотите загружать данные асинхронно перед отображением вкладки? Как указано @TGH, маршрутизация это отличная возможность, вы должны рассмотреть, особенно его @CanActivate
декоратор:
Вы могли бы рассмотреть возможность использовать атрибут load
, что соответствует Observable
. Последний будет ожидать, что наблюдаемые будут получать асинхронные события для отображения.
Вот новое содержание компонента приложения:
@Component({
selector: 'my-app',
template: `
<tabs>
<tab [tabTitle]="'Tab 1'" [load]="tabLoader">Tab 1 Content</tab>
<tab tabTitle="Tab 2">Tab 2 Content</tab>
</tabs>
`,
directives: [Tabs, Tab]
})
export class App {
constructor() {
this.name = 'Angular2';
this.tabLoader = Observable.create((observer) => {
setTimeout(() => {
observer.next();
}, 1000);
});
}
}
И обновление в Tabs
компонента:
@Component({
(...)
})
export class Tabs implements AfterContentInit {
(...)
displayTab(tab) {
// deactivate all tabs
this.tabs.toArray().forEach(tab => tab.active = false);
// activate the tab the user has clicked on.
tab.active = true;
}
selectTab(tab: Tab) {
if (tab.load) {
tab.load.subscribe(() => {
this.displayTab(tab);
});
} else {
this.displayTab(tab);
}
}
}
Вот соответствующий plunkr: https://plnkr.co/edit/d54CzKLrJirjkA6TDBC0?p=preview.
Надеется, что это помогает вам, Thierry
Вы можете рассмотреть использование маршрутизатора или этого, поскольку оно поддерживает ленивые маршруты. Http://www.syntaxsuccess.com/viewarticle/routing-in-angular-2.0 – TGH
Это ситуация вложенных компонентов, и я хочу, чтобы ленивая загрузка ребенка компонент. – Sachin
* ngIf может помочь вам здесь. Если вкладка активна, вы можете отложить загрузку Dom – Chandermani