2015-12-23 25 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; 
    } 
} 

Tôi cần thay đổi giá trị biến trên mọi thay đổi tuyến đường, cách xem sự kiện này trong Angular 2.x?Angular2 xem để thay đổi tuyến đường

+0

Đối với bộ định tuyến mới (=> RC.3), hãy xem http://stackoverflow.com/questions/37137455/angular-2-typescript-error-when-using-subscribe-function-on-new-router-rc -1/37137497 # 37137497 –

Trả lời

11

Trong phiên bản cuối cùng của góc (ví dụ như góc 2/4), bạn có thể làm điều này

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

Mỗi khi tuyến đường thay đổi, events Có thể quan sát được thông tin. Nhấp vào here cho tài liệu.

+1

Điều này đã làm các trick! Xin lưu ý rằng phần tử router là một thể hiện của Router: bạn nên '' 'import {Router} từ '@ angular/router';' '' và '' 'constructor (bộ định tuyến riêng: Router) {}' ''. – adripanico

+0

url thuộc tính không tồn tại trên loại sự kiện. – tatsu

17

Đây là những gì tôi sử dụng trong ứng dụng của mình. Bạn có thể đăng ký một phiên bản Route để theo dõi các thay đổi.

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

Xin lỗi, bỏ phiếu này trước khi bạn thay đổi câu trả lời cho Angular2, điều này là chính xác – Zyzle

+1

Cảm ơn! Hoạt động hoàn hảo. –

+2

@ulydev bạn vui lòng cung cấp plnkr hoặc mã làm việc cho bộ định tuyến nàyChiến phát hiện tôi không thể lấy cho bạn Cách sử dụng mã của bạn. –

0

Nếu bạn muốn bắt sự kiện khi tuyến đường thay đổi và khởi tạo một số mã như jQuery thì sử dụng móc OnActive. Ví dụ:

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

Nếu bạn đang sử dụng

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

sau đó

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

Đây là câu trả lời đúng cho các phiên bản hiện tại. Goli này khó tìm. +1 – FRECIA

+0

+1 Câu trả lời của bạn hợp lệ đối với (các) phiên bản hiện tại của Angular2. 'this.router.subscribe()' không hoạt động nữa. Thay vào đó, bạn cần phải đăng ký với các 'sự kiện' như đã được Dimpu phát biểu! – Bajro

Các vấn đề liên quan