在角度2中再次调用时,路由保持不变

时间:2017-03-30 13:14:53

标签: angular angular2-routing

我用这种方法调用这条路线

onDateChanged(event: IMyDateModel) {

    this.route.navigate(['/user/events',event.formatted]);
}

我的活动组件,

activatedroute.params.subscribe(p => { this.date = p['date?'] });
    if (this.date) {
      this.onDateChanged();
    } else {
      this.getEvents()
    }

当我第一次调用它时,它会触发该组件,但是当我从同一路径再次调用相同的函数时,组件未加载新值,即之前的路径保持不变。任何人都可以帮助我.Thanks。

2 个答案:

答案 0 :(得分:0)

如果您根据路线定义导航到与当前路线匹配的路线,则不会重新加载该组件。但是,您可以收听params上的Observable ActivatedRoute,以便在路径网址中的数据发生变化时收到提醒,然后从那里重新设置您的组件。

{
    path: "user/events/:type",
    component: MyComponent
}

/导航到user/events/unformatted将加载MyComponent。从user/events/unformatteduser/events/formatted的路由不会加载MyComponent。

在MyComponent内部,您可以执行以下操作:

class MyComponent {
    constructor(private activatedRoute: ActivatedRoute){}

    ngOnInit(){
        this.activatedRoute.params.subscribe((params) => {
            let newFormattingType = params["type"];

            //re-setup component based on formatting type
        })
    }
}

您需要更新回调,以便检查日期是否已更改,并且您的回调中不应包含?。更新您的代码以重新组合以下

activatedroute.params.subscribe((p) => {
    this.date = p['date'];

    if (this.date) {
      this.onDateChanged();
    } else {
      this.getEvents();
    }
 });

答案 1 :(得分:0)

来自Angular的路由教程:

ngOnInit() {
  this.route.params
    // (+) converts string 'id' to a number
    .switchMap((params: Params) => this.service.getHero(+params['id']))
    .subscribe((hero: Hero) => this.hero = hero);
}

有关更多信息,请访问:https://angular.io/docs/ts/latest/guide/router.html