Angular Routing Route Params是子组件的解析器中的空对象

时间:2019-02-19 15:50:16

标签: angular routing resolver routeparams

这是我的路线设置。

puzzle1

这是我的路由器呼叫,用于从const appRoutes: Routes = [ { path: '', component: HomeComponent }, { path: 'get', canActivateChild: [CanActivateOrder], children: [ { path: '', redirectTo: 'confirm', pathMatch: 'full' }, { path: 'confirm', component: ConfirmComponent }, { path: 'book/:id', resolve: { pageData: BookResolver }, component: BookComponent }] }, { path: '**', redirectTo: '' } ]; 导航到book/:id

/confirm

在BookResolver中,如果尝试访问ActivatedRoutes快照下的任何参数,则会得到空对象。

this._router.navigate(['get/book', 1234]);

但是,如果我尝试从BookComponent访问相同的内容,则会得到所需的输出。就像

@Injectable()
export class BookResolver implements Resolve<any> {

  constructor(private _activatedRoute: ActivatedRoute) {}

  resolve(): Observable<Book> {
    console.log(this._activatedRoute.snapshot.params);
    //This is {}
  }

我的路线设置到底在哪里出错?我假设这里的设置有问题。让我知道您是否需要进一步澄清这个问题。

这里是reproduction的闪电战。

1 个答案:

答案 0 :(得分:0)

仅在首次加载组件时使用"steps"是好的。 您应该改为在snapshot.params上订阅可观察到的参数。

ngOnInit

也可以代替此技巧:

this.ac.params.subscribe( (params: Params) => console.log(params); );

您应该正确导航:

this._router.navigate(['get/book', 1234])