2017-02-17 18 views
1

私は小さなブログを構築してangular2を学んでいます。 私はtypescript 2でangular-cliを使用しています。Angular2 [routerLink]の構築に失敗しました

小さなコンポーネントで問題が発生しました。 記事ページにいるときに、他の記事にアクセスするための "前の"リンクと "次のリンク"が必要です。

私のパスはこのように作られています:記事/:ID /:私のクラスコンポーネント内のスラグ

:(以下と私の問題、)これまでの私のコード:

getUrlParams() { 
    this.activatedRoute.params.subscribe((param) => { 
     this.loadPrevArticle(param); 
    }) 
    } 

    loadPrevArticle(param){ 
     let id = Number(param['id']); // Converts the original string to number 

     return this.myService.getArticles().subscribe((data) => { 
     // some stuffs to get the article object I want, actually working :) 
     }); 
    } 

私のサービスは、次のようになります。私は私のDを得た

getArticles() { 
    return this.http.get('my_api_link').map(
     (res: Response) => res.json() 
    ); 
} 

ATASは、サービスが正常に動作しますが...

MY問題です:

私は私のthis.getUrlParams()ngOnInit(中メソッドを呼び出す)[routerLink]私のテンプレートにエラーが表示されます。オブジェクトが見つかりません。

[routerLink]="['/article', nextArticle.id, nextArticle.slug] 

しかし、メソッドをクラスコンストラクタに移動すると、そのメソッドが動作します。私はこれを行う良い練習ではないことを知っている、私はngOnInit()ですべてを移動することを好むだろう

どのようにこれを行うにはどのようなアイデア?

*ngIf="nextArticle" [routerLink]="['/article', nextArticle.id, nextArticle.slug]" 

それはレンダリングの前に、データを待ちます:)おかげギュンター

html要素に追加:私は

SOLUTION

が...今失われたビットです

答えて

1

*ngIfを追加すると、routerLinkが作成される前に、nextArticleが使用できなくなる可能性があります。

*ngIf="nextArticle" [routerLink]="['/article', nextArticle.id, nextArticle.slug]" 

または

答えを
[routerLink]="nextArticle ? ['/article', nextArticle.id, nextArticle.slug] : null" 
+0

ありがとう!私はすでに試してみましたが、ページに何も表示されませんでした。 – KCarnaille

+0

「何もない」とはどういう意味なのでしょうか。 routerLinkを持つ要素だけが表示されず、 'nextArticle'がまだ利用できない間だけ表示されます。私は別のアプローチで私の答えを更新します。 –

+1

さて、あまりにも速いと私は答えて申し訳ありません。何らかの理由で、あなたのソリューションは実際に動作します。私は昨日それを試して、うまくいきませんでした...私はそれが誤ったLOLだったと思います。再度、感謝します ! – KCarnaille

関連する問題