前提・実現したいこと
データをグラフとして表示するためのWebアプリケーションを作成中で、
フロント側でAngular5のrouterを使ってルーティングを行なっており、
パスからパラメータを取ってきており、
パラメータに従ってサーバ側にリクエストしてデータを取得し、表示しています。
ルーティングのパス指定としては以下のようになっており、
typescript
1{ path: 'top/:year/:key', component: TopComponent}
例えば、top/2017/quarter:1 というパスで2017年度第1四半期のデータを表示するといった具合です。
画面の表示としては、サイドバーのコンポーネント(SideNavComponent)と
メインの表示のコンポーネント(TopComponent)の2つのコンポーネントから1画面が構成されています。
メイン画面はngOnInit()
の中でサーバへのリクエストを飛ばしています。
サイドバーで表示したいグラフのパラメータを設定し、
サイドバーの表示ボタンを押すとメイン画面にグラフが表示されるようにしたいです。
発生している問題・エラーメッセージ
サイドバーの表示ボタンを押した時の処理として
typescript
1this.router.navigate(['top/' + this.year + '/' + this.key]);
という具合にAngularのrouterを使ってルーティングしているのですが、
表示ボタンを押してもurlが変わるだけで表示は変わりません。
試したこと
3つほど試しました。
0. ルーティング後にリロード
表示ボタンを押した時の処理の最後にlocation.reload();
を加えることで、リロードして表示を変更することができました。しかし、これだと見た目が悪い上にビルドしてサーバに上げた時にurl直打ちと同じ状態になってしまうため表示してくれませんでした。
0. ngOnInit()
の呼び出し
表示ボタンを押した時にTopComponentのngOnInit()
を呼び出したのですが、パスのパラメータを取ってきてくれず、undefined状態になっていました。
0. ngDoCheck()
でのリクエスト
TopComponentのngOnInit()
でリクエストを飛ばすのではなく、ngDoCheck()
でリクエストを飛ばすようにしましたが、常にリクエストを送っている状態になってしまいました。
質問がわかりづらかったらすみません。要約すると、同じコンポーネントへのルーティングでも表示を変更するようにできるかどうかが知りたいです。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。