У меня есть расширитель, который использует контентную проекцию. Содержимое расширителя заключено в * ngIf (для оптимизации производительности). К сожалению, я понял, что все мои директивы в расширяемой форме инициализируются при запуске самого приложения, даже несмотря на то, что расширяемый изначально закрыт.Прогнозируемая угловая директива инициализируется, когда она должна быть скрыта.
Моя директива не должна инициализироваться до того, как вскрывается фактически открытая. Таким образом, мне нужна какая-то задержка инициализации или крючок, который запускается, когда директива фактически отображается.
Пример кода (Plunker здесь: https://plnkr.co/edit/R84AXZheAtZYLRmeSfkm?p=preview):
@Component({
selector: 'my-app',
template: `
<some-component>
Projected content <div some-directive></div>
</some-component>
`,
})
export class App {}
//************* Component that uses content projection *************
@Component({
selector: 'some-component',
template: `
<button (click)="showBody=!showBody">Toggle Content</button>
<div *ngIf="showBody">
<ng-content></ng-content>
</div>
`,
})
export class SomeComponent {
constructor() {}
private showBody = false;
}
//************* Directive that is set within an ng-if *************
@Directive({
selector: '[some-directive]',
})
export class SomeDirective {
constructor() {
}
ngOnInit() {
document.body.append('This should not be executed when the content is not visible');
}
}
Plunker можно найти здесь: https://plnkr.co/edit/R84AXZheAtZYLRmeSfkm?p=preview
не использовать angularjs тег для вопросов, связанных с angular2, если ваш вопрос не относится к обоим обрамления, как миграционные вопросы, для пример. Это две разные структуры, несмотря на наличие общего имени. – Claies