如何将参数从 Nativescript 中的同级路由传递给子路由
How to pass a parameter to child route from a sibling route in Nativescript
我在我的应用程序中使用 <page-router-outlet>
作为主要出口。
在其中一个页面 .html 中,我有几个导航按钮和一个 <router-outlet>
,因为我想将单击这些按钮的结果渲染到 <router-outlet>
。
在路由级别该页面有子路由:
const groceryListRoutes: Routes = [
{
path: 'grocery-lists',
component: GroceryListsComponent,
},
{
path: 'grocery-list/:id',
component: GroceryListComponent,
children: [
{
path: '',
component: GroceryListProductsComponent,
},
{
path: 'product-categories',
component: ProductCategoriesComponent,
},
{
path: 'products',
component: ProductsComponent,
},
],
},
从列出所有购物清单的页面我 link 到使用 [nsRouterLink]
显示特定购物清单信息的页面,如下所示:
<Label [text]="item.name" margin="10" [nsRouterLink]="['/grocery-list', groceryListId]"></Label>
在那里我毫无问题地传递了参数。一旦进入 grocery-list/:id 路由,它就会加载 '' 子路由并在 <router-outlet>
.
中加载 GroceryListProductsComponent
现在我想在 GroceryListProductsComponent HTML:
中使用此指令 link 从 GroceryListProductsComponent(在 <router-outlet>
中加载)到另一个子路由 (ProductsComponent)
<Label text="Next" width="80" height="80" [nsRouterLink]="['../products/', {zzz: 22}]"></Label>
应用导航到兄弟路由但没有传递参数zzz。我试过使用这样的查询参数:
<Label text="Next" width="80" height="80" [nsRouterLink]="['../products/', 22]"></Label>
并将路线更改为:
{
path: 'products/:zzz',
component: ProductsComponent,
}
没有结果。
我正在这样获取目标组件的参数:
constructor(private pageRoute: PageRoute, private router: Router){
this.pageRoute.activatedRoute
.switchMap(activatedRoute => activatedRoute.params)
.forEach((params) => {
this.zzz= params['zzz'];
});
}
但是当我尝试 alert() 变量 this.zzz 时,它说:未定义。
ngOnInit(){
alert(this.zzz);
}
所以我的问题是,如何在 Nativescript 中将参数从同级路由传递给子路由?因为当我在 2 个根路由之间传递参数时我没有问题。
提前致谢。
问题解决了。
我应该从 PageRoute 获得的 activatedRoute 访问子路由。所以构造函数应该是这样的:
constructor(private pageRoute: PageRoute, private router: Router){
this.pageRoute.activatedRoute
.switchMap(activatedRoute => activatedRoute.children[0].paramMap)
.forEach((params) => {
this.zzz= params['params']['zzz'];
});
}
我用这个从子路由访问了参数:
activatedRoute.children[0].paramMap
我在我的应用程序中使用 <page-router-outlet>
作为主要出口。
在其中一个页面 .html 中,我有几个导航按钮和一个 <router-outlet>
,因为我想将单击这些按钮的结果渲染到 <router-outlet>
。
在路由级别该页面有子路由:
const groceryListRoutes: Routes = [
{
path: 'grocery-lists',
component: GroceryListsComponent,
},
{
path: 'grocery-list/:id',
component: GroceryListComponent,
children: [
{
path: '',
component: GroceryListProductsComponent,
},
{
path: 'product-categories',
component: ProductCategoriesComponent,
},
{
path: 'products',
component: ProductsComponent,
},
],
},
从列出所有购物清单的页面我 link 到使用 [nsRouterLink]
显示特定购物清单信息的页面,如下所示:
<Label [text]="item.name" margin="10" [nsRouterLink]="['/grocery-list', groceryListId]"></Label>
在那里我毫无问题地传递了参数。一旦进入 grocery-list/:id 路由,它就会加载 '' 子路由并在 <router-outlet>
.
现在我想在 GroceryListProductsComponent HTML:
中使用此指令 link 从 GroceryListProductsComponent(在<router-outlet>
中加载)到另一个子路由 (ProductsComponent)
<Label text="Next" width="80" height="80" [nsRouterLink]="['../products/', {zzz: 22}]"></Label>
应用导航到兄弟路由但没有传递参数zzz。我试过使用这样的查询参数:
<Label text="Next" width="80" height="80" [nsRouterLink]="['../products/', 22]"></Label>
并将路线更改为:
{
path: 'products/:zzz',
component: ProductsComponent,
}
没有结果。
我正在这样获取目标组件的参数:
constructor(private pageRoute: PageRoute, private router: Router){
this.pageRoute.activatedRoute
.switchMap(activatedRoute => activatedRoute.params)
.forEach((params) => {
this.zzz= params['zzz'];
});
}
但是当我尝试 alert() 变量 this.zzz 时,它说:未定义。
ngOnInit(){
alert(this.zzz);
}
所以我的问题是,如何在 Nativescript 中将参数从同级路由传递给子路由?因为当我在 2 个根路由之间传递参数时我没有问题。
提前致谢。
问题解决了。
我应该从 PageRoute 获得的 activatedRoute 访问子路由。所以构造函数应该是这样的:
constructor(private pageRoute: PageRoute, private router: Router){
this.pageRoute.activatedRoute
.switchMap(activatedRoute => activatedRoute.children[0].paramMap)
.forEach((params) => {
this.zzz= params['params']['zzz'];
});
}
我用这个从子路由访问了参数:
activatedRoute.children[0].paramMap