2017-05-01 9 views
0

ディレクティブを使用して、一定の時間が経過した後にエレメントを遅延ロードすることは可能ですか?ディレクティブを使用してコンポーネントレンダリングを延期する

次は私が達成しようとするものです。

フッター-container.html

<template [ngIf]="flag"> 
    <footer></footer> 
<template> 

でフッター-container.tsで

flag = false; 

setTimeout(() => { 
    this.flag = true; 
    this.changeDetector.markForCheck(); 
}, 1000); 

次のように指令が消費することになります。

In footer-container.html

<footer [defer]="1000"></footer> 
+0

はい、それはそのように行われています:ここ

<my-dir *delay="let delay from delay"></my-dir> 

はplnkrです。あなたが示したアプローチの問題は何ですか? – estus

+0

ディレクティブはすべてのボイラープレートコードを追加せずに再利用可能です。 – user3233089

答えて

3

ngForやngIfのような構造指示を作成する必要があります。ここではドキュメントを参照してください:https://angular.io/docs/ts/latest/guide/structural-directives.html

あなたはそのようにそれを使用することができます:https://plnkr.co/edit/mqU597fm3cdl21VYqcX5?p=preview

@Component({ 
    selector: 'my-dir', 
    template: 'hi there' 
}) 
export class MyDir { 

} 

@Directive({ 
    selector: '[delayFrom]' 
}) 
export class Delay implements AfterViewInit { 
    @Input() delayFrom: number; 

    constructor(private tpl: TemplateRef<any>, private vc: ViewContainerRef) { 
    } 

    ngAfterViewInit() {   
    setTimeout(() => { 
     this.vc.createEmbeddedView(this.tpl); 
    }, this.delayFrom); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <my-dir *delay="let delay from delay"></my-dir> 
    </div> 
    `, 
}) 
export class App { 
    name: string; 
    delay = 5000; 

    constructor() { 
    } 
} 
+0

私が聞くことができるなら '遅延からの遅延を許す 'の目的は何ですか? '' – user3233089

+0

はい、遅延* "delay" https://plnkr.co/で書くことができます。編集/ ZtR80WyTXMUDvfF0ANdr –

関連する問題