2016-06-30 2 views
35

Я модернизировал, чтобы использовать новый маршрутизатор с угловым 2 от маршрутизатора-устаревшего, и какое-то поведение изменилось.Переход на тот же маршрут, не обновляющий компонент?

На странице, с которой возникают проблемы, находится страница поиска. Мы решили поместить все поисковые термины в URL-адрес, используя HashLocationStrategy. Трассы выглядеть следующим образом:

const routes: RouterConfig = [ 
    { path: '', component: HomeComponent }, 
    { path: 'search/:term/:cat/:page/:sort/:size/:more', component: HomeComponent }, 
    { path: 'search/:term/:cat/:page/:sort/:size', component: HomeComponent }, 
    { path: 'search/:term/:cat/:page/:sort', component: HomeComponent }, 
    { path: 'search/:term/:cat/:page', component: HomeComponent }, 
    { path: 'search/:term/:cat', component: HomeComponent }, 
    { path: 'search/:term', component: HomeComponent }, 
    { path: 'details/:accountNumber', component: DetailsComponent } 
]; 

Я знаю, что строка запроса подход может быть лучше подходит для всех этих вариантов, но требования проекта и принятые другими людьми ...

Во всяком случае, если я перейти к localhost/#/search/Hello с помощью this.router.navigate(['/search/Hello']); затем маршрутизатор отлично работает, и все отлично. Хотя на этой странице, если я попытаюсь установить this.router.navigate(['/search/World']);, тогда URL-адрес в адресной строке браузера обновится соответствующим образом, но компонент не изменится вообще.

Раньше я мог использовать routerCanReuse, чтобы указать, что я хотел повторно использовать компонент поиска, а routerOnReuse повторил поиск при наступлении навигации. Я не вижу эквивалента их в @angular/router. Как я могу перезагрузить текущий маршрут с новыми параметрами URL?

Я запускаю версию 2.0.0-rc.3 для Angular 2 и 3.0.0-alpha.8 of @ angle/router.

+0

Я столкнулся же problem.can вы сказать мне, где я могу поставить этот код на app.component.ts странице или фактической странице (которая не перезагружается). Еще одна вещь: this.service.get (term) .then (result => {console.log (result);}); **. Не могли бы вы объяснить вкратце. – pushp

ответ

33

Если только параметры имеют изменения, сам компонент не будет инициализироваться снова. Но вы можете подписаться на изменения в параметрах, которые вы отправляете.

Например, на методе ngOnInit вы можете сделать что-то вроде этого:

ngOnInit() { 
    this.sub = this.route.params.subscribe(params => { 
     const term = params['term']; 
     this.service.get(term).then(result => { console.log(result); }); 
    }); 
    } 
+3

Мне было очень любопытно, почему параметры были наблюдаемыми. Это объясняет это и имеет большой смысл. –

+5

Я этого не понимаю. Проблема - или, по крайней мере, моя проблема - заключается в том, что функция ngOnInit не запускается снова, когда тот же маршрут вызывается с другим значением параметра. Так что это за помощь ...? – Inigo

+1

Идея состоит в том, что угловой не требуется снова устанавливать компонент. Изменены только данные, в частности данные маршрута. Таким образом, у вас есть функция, которая будет вызывать в любое время, когда данные маршрута изменились, и вы можете отреагировать на это изменение. –

Смежные вопросы