【问题标题】:Nativescript + Angular, How do I reach child routes in a nested page router outlet?Nativescript + Angular,如何在嵌套页面路由器插座中访问子路由?
【发布时间】:2019-04-02 20:30:52
【问题描述】:

我想在 NS + Angular 7 应用中实现 tabview 导航。

这是我目前的设置:

app-routing.module.ts:

...

const routes: Routes = [
    { path: '', redirectTo: '/login', pathMatch: 'full' },
    { path: 'login', component: LoginComponent },
    { path: 'tabs', loadChildren: '~/app/tabs/tabs.module#TabsModule'; }
];

...

tabs.module.ts:

...
NativeScriptRouterModule.forChild([
            {   path: 'def',
                component: TabsComponent,
                children: [
                  {
                      path: 'market',
                      outlet: 'market',
                      component: NSEmptyOutletComponent,
                      loadChildren: '~/app/market/market.module#MarketModule'
                  },
                  {
                      path: 'list',
                      outlet: 'list',
                      component: NSEmptyOutletComponent,
                      loadChildren: '~/app/list/list.module#ListModule'
                  },
                  {
                      path: 'search',
                      outlet: 'search',
                      component: NSEmptyOutletComponent,
                      loadChildren: '~/app/search/search.module#SearchModule'
                  },
                  {
                      path: 'insight',
                      outlet: 'insight',
                      component: NSEmptyOutletComponent,
                      loadChildren: '~/app/insights/insights.module#InsightsModule'
                  },
                  {
                      path: 'explore',
                      outlet: 'explore',
                      component: NSEmptyOutletComponent,
                      loadChildren: '~/app/explore/explore.module#ExploreModule'
                  }
            ]}
          ])
...

最后是 5 个路由模块之一,让我们使用 list-routing.module.ts:

...
const routes: Routes = [
    { path: '', redirectTo: 'list' },
    { path: 'list', component: ListComponent },
    { path: 'all', component: ListListComponent }
]
...

我想我搞混了,因为只有在您通过登录屏幕后才会出现标签。成功登录后,我在做:

this.router.navigate(['tabs/def'], {
                        transition: {
                          name: 'fade',
                          duration: 100,
                          curve: 'linear'
                        },
                        clearHistory: true
                    }

这确实让我进入了市场,显示了我的“主”屏幕。然后,如果我使用以下命令单击其中一个选项卡:

tabs.component.html:

<TabView class="fal" style="font-size: 20; padding: 3;" >
    <page-router-outlet *tabItem="{title: 'home'}" name="market"></page-router-outlet>
    <page-router-outlet *tabItem="{title: 'clipboard-list'}" name="list"></page-router-outlet>
    <page-router-outlet *tabItem="{title: 'search'}" name="search"></page-router-outlet>
    <page-router-outlet *tabItem="{title: 'lightbulb'}" name="explore"></page-router-outlet>
    <page-router-outlet *tabItem="{title: 'newspaper'}" name="insight"></page-router-outlet>
</TabView>

然后我被带到正确的出口。这就是问题所在:List Component 可以正常加载,但是一旦我单击其中一个列表以访问 ListListComponent,它就会告诉我:

Error: Cannot match any routes. URL Segment: 'tabs/def'

我设置最后一个导航的方式是:

this.router.navigate( [ { outlets: { list: [ '/all' ] } }], { relativeTo: this.route })

我尝试了几种传递“tabs/def/all”或“tabs/def”网址的组合,但均未成功。据我了解,我在开始时传递了一个 URL,但现在我嵌套了,我应该穿过插座。那么我的语法在最后一个 router.navigate 上是不是很差?

非常感谢您的帮助!!

【问题讨论】:

  • 你可以创建一个游乐场吗?
  • 不确定我是否可以导入整个项目,但会调查一下,谢谢! @纳伦德拉
  • 你试过了吗? this.router.navigate(['/tabs', { outlets: { list: ['all'] } }]);或 this.router.navigate(['/tabs/def', { outlets: { list: ['all'] } }])
  • 是的,两者都尝试了,得到 [错误:无法匹配任何路由。 URL 段:'tabs'] 和 [错误:无法匹配任何路由。 URL Segment: 'tabs/def'] 分别
  • 然后如果我不提供任何 URL 并尝试设置插座,例如 this.router.navigate( [ { outlets: { list: [ 'all' ] } }], { relativeTo: this.route }) 然后我得到相同的“错误:无法匹配任何路由。URL 段:'tabs/def'”

标签: javascript angular nativescript angular-routing


【解决方案1】:

想通了!您不需要在功能模块路由中指定插座。对于发现此内容的其他人:

特征路由模块:

const routes: Routes = [
    {   path: '',
        component: ListComponent,
        children: [
            {
                path: '',
                children: [
                    {   path: '', redirectTo: 'all' },
                    {   path: 'all', component: ListListComponent },
                    {   path: 'group', component: ListgroupComponent },
                ]
            }
        ]
    }
];

list.component:

<page-router-outlet></page-router-outlet>

从 ListListComp 导航 -> ListgroupComp(通过点击元素触发):

this.router.navigate([ '../group' ], { relativeTo: this.route }

【讨论】:

  • 非常感谢。我想你让我免于沮丧!
猜你喜欢
  • 2020-05-16
  • 2018-08-18
  • 2018-05-29
  • 1970-01-01
  • 2018-07-28
  • 2017-03-04
  • 2020-03-16
  • 2017-04-29
  • 2016-12-30
相关资源
最近更新 更多