2016-08-09 47 views

Antwort

2

bin mit dieser ist derzeit das einzige Verhalten unterstützt. Es gibt Pläne, dies zu machen konfigurierbare https://github.com/angular/angular/issues/9811

Sie können abonnieren Sie den Parameter ändern und führen Sie die Initialisierung dort

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 

    } 
} 

Siehe auch How do I re-render a component manually?

+0

Nun eigentlich, was der Thread vorschlägt, ist Gegenteil von dem Verhalten, das ich beabsichtige zu haben .. Aber wenn sie es konfigurierbar machen können, dann kann es für alle Szenarien funktionieren. – Mustafa

+0

Hängt davon ab, wie Sie es sehen ;-) Momentan ist das Standardverhalten wie beim alten 'routerCanReuse() {return true; } ', aber was Sie wollen, scheint' routerCanReuse() {return false; } '. –

+0

Genau. Weil ich den Konstruktor jedes Mal, wenn die Route aufgerufen wird, ausführen muss. – Mustafa

1

Nach ca. 2 Stunden im Internet nach einer Antwort auf diese Suche Router-Problem, war meine Lösung, auf den Router zu verzichten und lassen Sie einfach meine Komponente ihr Ding machen.

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

Dies könnte auch für Sie arbeiten, wenn Sie keine Wachen, die es dessen Laden durch den Besuch die URL mit dem richtigen params verhindern würden.

Nicht der "Best-Practice-Weg", aber es funktioniert für mich.