2016-08-09 1 views
0

私はAngular2で遊んでいますし、次の操作を行いますしようとしています:テンプレートがAngular2で完全にレンダリングされたときに使用できるメソッドはありますか?

  • は項目がDOMに読み込みが終了したら、アイテムをフォーマットする外部ライブラリへの呼び出しを行う項目
  • の一覧を表示しますある意味で、例えば石積み。

私はBackbone Marionetteに精通しています。そのため、おそらくonShowメソッドを使用します。 Angular2では、次のJSメソッドを呼び出せるように、DOMが完全にレンダリングされていることを確認するために何ができますか?

コードスニペット:

@Component({ 
    selector: 'my-views', 
    templateUrl: 'app/views/views.component.html', 
    styleUrls: ['app/views/views.component.css'], 
    directives: [HeaderComponent] 
}) 

export class ViewsComponent implements OnInit { 
    ... 

    ngOnInit() { 
    this.user = new User(); 

    if (this.user.session_id) { 
     this.getList(); 
    } else { 
     this.router.navigate(['login']); 
    } 
    } 

    ngAfterViewInit() { 
    var elem = document.querySelector('.grid'); 
    var colWidth = document.querySelector('.grid-size'); 

    var msnry = new Masonry(elem, { 
     // options 
     itemSelector: '.grid-item', 
     columnWidth: colWidth, 
     percentPosition: true 
    }); 
    } 

    getList() { 
    this.getList(this.user) 
     .then(Array => { 
     this.myViews = Array; 
     }); 
    } 

} 

私はngAfterViewInitフック内のブレークポイントを入れて、それがヒットした時に、DOMはまだリストが表示されません。私は、リストが正常にレンダリングされた後、同じスニペットをコンソールで実行すると、正常に実行されたため、フック内にあるコードが機能することがわかります。

+0

はなかったですコンポーネントクラスにOnInitインターフェイスを実装しますか? –

+0

このパートは? 'ExportクラスViewsComponentはOnInit {@ –

答えて

0

あなたはライフサイクルフック以下のいずれかを試すことができます。

export class demoComponent{ 
    //called fter initializing the component's views and child views 
    ngAfterViewInit(){ 
    } 
    //after every check of the component's views and child views 
    ngAfterContentInit(){ 
    } 
    //after projecting content into the component. 
    ngAfterViewChecked(){ 
    } 
} 
+0

私はあまりにも前にそれらを試したが、それらのどれも働かなかった - 私はコードスニペットで自分の質問を更新した。 –

+0

私はいくつかのコードを移動し、 'ngAfterViewChecked()'を試してみました。 –

1

Angular2のいくつかのライフサイクルフックがあります:https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html

私はあなたが使用したいするつもりだと思う:AfterViewInit

+0

を実装しています。これまでもngAfterViewInitを使ってみましたが、うまくいきませんでした。コードスニペットで質問を更新しました。 –

関連する問題