2015-12-23 4 views
16
@RouteConfig([ 
    {path: '/about', name: 'About', component: About, useAsDefault: true}, 
    {path: '/test', name: 'Test', component: Test} 
]) 

export class MyApp { 
    router: Router; 
    location: Location; 
    isCollapsed: boolean = true; 

    // ON ROUTE CHANGE { 
     this.isCollapsed = true; 
    // } 

    constructor(router: Router, location: Location) { 
     this.router = router; 
     this.location = location; 
    } 
} 

Мне нужно изменить значение переменной при каждом изменении маршрута, как наблюдать за этим событием в Angular 2.x?Angular2 watch для изменения маршрута

+0

Для нового маршрутизатора (=> RC.3) см. Http://stackoverflow.com/questions/37137455/angular-2-typescript-error-when-using-subscribe-function-on-new-router-rc -1/37137497 # 37137497 –

ответ

11

В окончательной версии угловой (например, угловые 2/4), вы можете сделать это

this.router.events.subscribe((event) => { 
    console.log(event); 
    if(event.url) { 
     console.log(event.url); 
    } 
}); 

Каждый раз, когда маршрут изменяется, events Observable имеет информацию. Нажмите here для docs.

+1

Это сделало трюк! Обратите внимание, что элемент маршрутизатора является экземпляром маршрутизатора: вы должны «импортировать» {Router} из «@ angular/router», '' 'и' '' constructor (private router: Router) {} '' '. – adripanico

+0

URL-адрес свойства не существует в событии типа. – tatsu

17

Вот что я использую в своем приложении. Вы можете подписаться на экземпляр Route для отслеживания изменений.

class MyClass { 
    constructor(private router: Router) { 
    router.subscribe((val) => /*detect changes*/) 
    } 
} 
+0

Прошу проголосовать, перед тем как вы изменили ответ для Angular2, это правильно – Zyzle

+1

Спасибо! Прекрасно работает. –

+2

@ulydev, пожалуйста, предоставьте plnkr или рабочий код для этого определения routerChange, я не могу получить вас. Как использовать ваш код. –

0

Если вы хотите, чтобы поймать событие, когда изменение маршрута, и инициализировать некоторый код как JQuery затем использовать OnActive крючок. Например:

import {Component} from 'angular2/core'; 
import {OnActivate,ComponentInstruction} from "angular2/router"; 
declare var $:any; 
declare var Foundation:any; 
@Component({ 
templateUrl :'/app/templates/home.html' 
}) 
export class HomeComponent implements OnActivate{ 

    routerOnActivate(next: ComponentInstruction, prev: ComponentInstruction) 
    { 

    new Foundation.Orbit($("#es-slide-show"), {}); 
    return true; 
    } 
} 
20

Если вы используете

"@angular/router": "3.0.0-alpha.7", 
"@angular/router-deprecated": "2.0.0-rc.2", 

затем

this.router.events.subscribe((event) => { 
     console.log('route changed'); 
}); 
+0

Это правильный ответ для текущих версий. Голи это было трудно найти. +1 – FRECIA

+0

+1 Ваш ответ действителен для текущей версии (-ов) Angular2. 'this.router.subscribe()' больше не работает. Вместо этого вам нужно подписаться на «события», как указано Dimpu! – Bajro

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