Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angular2从路由器获取可选参数_Angular_Router_Optional Parameters - Fatal编程技术网

angular2从路由器获取可选参数

angular2从路由器获取可选参数,angular,router,optional-parameters,Angular,Router,Optional Parameters,我正在使用angular 2版本rc4和路由器版本3.0.0-beta.2 给定此url: 我想获取status可选参数的值。 据我所知,该代码应该可以工作: console.log("status", this._activatedRoute.snapshot.params['status']); 但我对此没有定义。 同样有趣的是,这段代码为我提供了正确的值: console.log("urlsegment", this._activatedRoute.snapshot['_urlSegme

我正在使用angular 2版本rc4和路由器版本3.0.0-beta.2

给定此url: 我想获取status可选参数的值。 据我所知,该代码应该可以工作:

console.log("status", this._activatedRoute.snapshot.params['status']);
但我对此没有定义。 同样有趣的是,这段代码为我提供了正确的值:

console.log("urlsegment", this._activatedRoute.snapshot['_urlSegment'].pathsWithParams[0].parameters['status']);
我不明白为什么? 我做错了什么? 第二个解决方案非常难看,所以我不想使用它

欢迎任何帮助

编辑: main.ts:

bootstrap(App, [
   APP_ROUTER_PROVIDERS, ..Some other stuff..]).then((appRef) => AppInjector(appRef.injector));
app.routes.ts:

export const routes: RouterConfig = [
    {path: 'admin', component: FrontComponent, children: [...FrontRoutes]},
    {path: '', component: PublicComponent, children: [ ...PublicRoutes]}
];

export const APP_ROUTER_PROVIDERS = [
    provideRouter(routes)
];
export const PublicRoutes: RouterConfig = [
    {path: '', redirectTo: '/dashboard', terminal: true, canActivate:[CanActivateGuard]},
    {path: 'test', component: TestRouterComponent, children: [...TestRoutes]},
    {path: 'dashboard', component: DashboardRouterComponent, children: [...DashboardRoutes]},
];
export const TestRoutes: RouterConfig = [
    {path: '', component: TestComponent, canActivate:[CanActivateGuard]},
    {path: 'detail/:id', component: TestDetailComponent, canActivate:[CanActivateGuard]},
];
public.routes.ts:

export const routes: RouterConfig = [
    {path: 'admin', component: FrontComponent, children: [...FrontRoutes]},
    {path: '', component: PublicComponent, children: [ ...PublicRoutes]}
];

export const APP_ROUTER_PROVIDERS = [
    provideRouter(routes)
];
export const PublicRoutes: RouterConfig = [
    {path: '', redirectTo: '/dashboard', terminal: true, canActivate:[CanActivateGuard]},
    {path: 'test', component: TestRouterComponent, children: [...TestRoutes]},
    {path: 'dashboard', component: DashboardRouterComponent, children: [...DashboardRoutes]},
];
export const TestRoutes: RouterConfig = [
    {path: '', component: TestComponent, canActivate:[CanActivateGuard]},
    {path: 'detail/:id', component: TestDetailComponent, canActivate:[CanActivateGuard]},
];
test.routes.ts:

export const routes: RouterConfig = [
    {path: 'admin', component: FrontComponent, children: [...FrontRoutes]},
    {path: '', component: PublicComponent, children: [ ...PublicRoutes]}
];

export const APP_ROUTER_PROVIDERS = [
    provideRouter(routes)
];
export const PublicRoutes: RouterConfig = [
    {path: '', redirectTo: '/dashboard', terminal: true, canActivate:[CanActivateGuard]},
    {path: 'test', component: TestRouterComponent, children: [...TestRoutes]},
    {path: 'dashboard', component: DashboardRouterComponent, children: [...DashboardRoutes]},
];
export const TestRoutes: RouterConfig = [
    {path: '', component: TestComponent, canActivate:[CanActivateGuard]},
    {path: 'detail/:id', component: TestDetailComponent, canActivate:[CanActivateGuard]},
];
我使用路由器导航的方式:

this._router.navigate(['test', {status:07}]);

可选参数将添加到特定管线。如果将它们添加到父管线或子管线,则无法获取它们

_activatedRoute.parent.queryParams.subscribe(params => console.log(params['s‌​tatus']));, _activatedRoute.firstChild.queryParams.subscribe(params => console.log(params['s‌​tatus']));

parent
firstChild
children
是在RC.6中添加的方便方法。可选参数添加到特定路线。如果将它们添加到父管线或子管线,则无法获取它们

_activatedRoute.parent.queryParams.subscribe(params => console.log(params['s‌​tatus']));, _activatedRoute.firstChild.queryParams.subscribe(params => console.log(params['s‌​tatus']));

parent
firstChild
children
是在RC.6中添加的方便方法。请发布路线以及如何导航到当前路线。
terminal:true,
不久前更改为
pathMatch:'full'
。我认为您需要阅读
queryParams
。是的,
…snapshot.queryParams['status']
params
是为路径段传递的,比如
{path:'some/:status/other',…}
我已经尝试过了。log(this._router.routerState.snapshot.queryParams['status']);不幸的是,此解决方案也给了我未定义的内容。请发布路线以及如何导航到当前路线。
终端:true,
不久前已更改为
pathMatch:“full”
。我想您需要改为阅读
queryParams
。是的,
…snapshot.queryParams['status']
params
是为路径段传递的,比如
{path:'some/:status/other',…}
我已经尝试过了。log(this._router.routerState.snapshot.queryParams['status']);不幸的是,这个解决方案也给了我未定义的。