2017-07-31 13 views
0

私はangular2アプリケーションに取り組んでいます。コンストラクタの関数がコンストラクタの関数が完了しなくなるまでコンストラクタの後のコンポーネントのライフサイクルを保持する方法はありますか?

私のメニューを表示するコンポーネントがあります。このコンポーネントでは、メニュー項目(配列)のリストがあり、コンストラクタでは、true/falseでメニュー項目のアクセス権を取得するためにAPIを呼び出しています。 HTMLファイルでは、menuList配列をループして出力し、すべてのmenuListアイテムをアクセス許可オブジェクトでコンパイルします。許可があれば、そうでなければ表示されます。

apiはデータを返すのに時間がかかりますが、応答を返す前にhtmlがビルドされていたため、エラーが発生します。そのため、コンポーネントの初期化後に最初にAPIの応答を取得する必要があります。 HTMLファイルで

+2

あなたは何をしようとしているかについていくつかのコンテキストを提供できますか?必要なデータが利用できるようになるまでローディングをブロックする[リゾルバ](https://angular.io/guide/router#resolve-pre-fetch-component-data)を記述することができます。 – jonrsharpe

+0

あなたは@ routerlineを指摘していると思います。 –

+1

どのようなエラーが出るのかははっきりしませんが、コンポーネント内の非同期データを扱う他の方法があります。私のブログから、例えば:http://blog.jonrshar.pe/2017/Apr/09/async-angular-data.html – jonrsharpe

答えて

1

それを印刷するメニューリストの配列をループする私はあなたがアイテムを表示するには、このようなngForと建設を使用していると仮定しています:

<menu-item *ngFor="let item of menuItems"..> 

この場合、最適なアプローチをサーバーからの応答を得るまで、menuItemsに値を入力しないでください。これらの行に沿って何か:

export class MenuComponent { 
    menuItems = []; 
    constructor(s: BackEndService) { 
    } 

    ngOnInit() { 
     s.getPermissions().toPromise().then((permissions)=>{ 
      permissions.forEach(()=>{ 
      // some calculations 
      menuItems.push(item); 
      }) 
     }) 
    } 
} 
関連する問題