私はAngular2の新人です。私はAngular 1ダイジェストサイクルに慣れています。つまり、ビューの範囲を更新すると、$scope.$digest()
を呼び出してダイジェストを手動でトリガーすることができます。しかし、新しいフレームワークに古いバージョンの暗黙的なデータバインディングがないことを考えると、Angular2でこれを行う方法はわかりません。コンポーネントを手動で再レンダリングするにはどうすればよいですか?
ここに私の問題があります。
// Router
export const AppRoutes : RouterConfig = [
{
path: 'my/:arg/view',
component: MyComponent
}
]
は、その後、私はこのコンポーネントを持っている:
// Component
export class MyComponent {
constructor(private route : ActivatedRoute,
private r : Router) {
let id = parseInt(this.route.params['value'].id);
console.log(id);
// do stuff with id
}
reloadWithNewId(id:number) {
this.r.navigateByUrl('my/' + id + '/view');
}
}
私は/my/1/view
をURLに移動言うことができます私は、パラメータ付きのURLがヒットしたときに、コンポーネントをロードするルートを持っています。コンストラクターが呼び出され、番号1
が記録されます。ただし、reloadWithNewId
に新しいID、reloadWithNewIf(2)
をコールした場合、コンストラクターは再び呼び出されません。コンポーネントを手動で再ロードするにはどうすればよいですか?
推奨される方法は、(ngOnInit()のparamsにサブスクライブする)受け入れられた解決策ですが、必ずしも機能するとは限りません。たとえば、x軸ラベルの変更に正しく応答しないng2-charts https://github.com/valor-software/ng2-chartsを使用しています(https://github.com/valor -software/ng2-charts/issues/547)を参照してください。サードパーティのコンポーネントにこのようなバグがある場合、文字通りそのコンポーネントをリロードする方法はありますか? –