2016-08-09 7 views
4

のために再初期化しません:「テスト/ 1」から「テスト/ 2」にAngular2コンポーネントは、私は、パラメータT1とテストルートの下に持ってパラメータ化されたルート

{ 
    path: 'Test/:T1', 
    component: TestComponent 
}, 

とき私は、ルート私のTestComponentは再初期化されません。角度ルータの問題ですか?

私は、これは現在サポートされている唯一の動作です"@angular/router": "3.0.0-beta.1"

答えて

2

を使用しています。あなたはパラメータを購読することができ、この設定可能https://github.com/angular/angular/issues/9811

はこの答えのためにウェブを検索するのに約2時間後にも参照してくださいHow do I re-render a component manually?

+0

実際にスレッドが示唆していることは、私が持っていると思われる振る舞いとは逆です。しかし、それらを設定可能にすることができれば、すべてのシナリオでうまくいくかもしれません。 – Mustafa

+0

あなたの見方に依存します;-)現在、デフォルトの動作は古い 'routerCanReuse(){trueを返します。 } '、しかしあなたが望むものは' routerCanReuse(){return false; } '。 –

+0

正確に..ルートが呼び出されるたびに実行するコンストラクタが必要なので。 – Mustafa

1

を変更して、そこ

export class MyComponent { 
    constructor(private route : ActivatedRoute, 
     private r : Router) {} 

    reloadWithNewId(id:number) { 
     this.r.navigateByUrl('my/' + id + '/view'); 
    } 

    ngOnInit() { 
     this.sub = this.route.params.subscribe(params => { 
     this.paramsChanged(params['id']); 
     }); 
    } 

    paramsChanged(id) { 
     console.log(id); 
     // do stuff with id 

    } 
} 

を初期化を行うようにする計画があります。ルータの問題では、私の解決策は、ルータを控え、私のコンポーネントがそのことをすることでした。

window.location.href = '/my/' + new_id_param + '/view';

あなたが右のparamsにURLを訪問してロードされているからそれを妨げる何のガードを持っていない場合、これはまた、あなたのために働くことができます。

「ベストプラクティスの方法」ではなく、私のために働きます。

関連する問題