问题标签 [angular2-routing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1564 浏览

angular - Angular 2:“...”的路由生成器未包含在传递的参数中

因此,我的 AuthenticationService 中有以下代码。检查登录凭据后,用户会被重定向到他们的个人资料:

authentication.service.ts

一切都很好,但是自从我在 中引入了一些子路由后ProfileComponent,我遇到了一些错误。首先,这是我的带有 RouteConfig 的 AppComponent:

app.ts

如您所见,ProfileComponent 内部定义了一些新路由。如此处所示:

ProfileComponent.ts

所以这里的问题是,在我在 ProfileComponent 中引入一些子路由之前,一切正常。用户被重定向,用户名出现在 URL 中,一切都很好。但是由于我添加了这些子路由,因此出现以下错误:

"Route generator for 'username' was not included in parameters passed."

如果有人可以帮助我,那就太好了!提前致谢!

0 投票
5 回答
16130 浏览

angular - Angular2 获取当前路由的别名

我可以使用 location.path() 获取当前路线的路径,例如:/about、/、/news。但是我怎样才能获得它的别名(路由定义中的“as”部分)?

可能吗?

0 投票
0 回答
283 浏览

angular - Angular2:路由器劫持

想象一下,我们有一个受某种外部登录保护的视图。这是工作流程

  1. 用户尝试访问该页面。
  2. 用户被重定向到外部登录。
  3. 用户执行登录。
  4. 用户被重定向到受保护的页面。

我尝试的第一件事是设置一个钩子routerOnActivate来检查身份验证并将用户重定向到执行重定向的登录视图。这个登录视图也是用户在登录后结束的视图,所以我需要再次重定向到受保护的页面。

  1. routerOnActivate HomeComponent -> 导航([“登录”])
  2. routerOnActivate LoginComponent -> window.location.href = redirectUri
  3. ...
  4. routerOnActivate LoginComponent -> 设置身份验证;导航([“主页”])

然而,在某些情况下,存在竞争条件,在第 2 步或第 4 步,当它再次尝试导航时导航仍未完成,最终出现错误:

说错误是重现和调试的麻烦,但最后我发现它是针对这种竞争条件的。

所以,问题是......我怎样才能确定只有在所有导航完成后才触发导航?我应该改用routerCanActivate钩子吗?

0 投票
13 回答
48951 浏览

angular - Angular 2:从父组件获取 RouteParams

如何从父组件获取 RouteParams?

App.ts

然后,在 中ParentComponent,我可以轻松获取我的用户名参数并设置子路由。

Parent.ts

但是,如何在这些子组件中获得相同的“用户名”参数?做与上面相同的技巧,不这样做。因为这些参数是在 ProfileComponent 中定义的?

0 投票
1 回答
4054 浏览

angular - 如何在 angular2 中注入位置?

我认为注入 Location 的方式与注入 Http 的方式相同。但是,我的应用程序中断 - 如果我在最后一行取消注释“公共位置:位置”,则页面不会呈现。据我所见,我有正确的导入和提供者数组:

在我的 index.html 中,我有以下行:

在我的引导代码中,我有:

不确定我是否遗漏了某些内容或当前版本已损坏。如果是第一种情况,我错过了什么?

0 投票
2 回答
13801 浏览

angular - 使用 HTML5 路由时 Angular 2 的路由器是否损坏?

这个全新的路线语法听起来不错,现在我认为它确实如此。我放弃了让它工作的尝试,在这里我注意到甚至 Angular 2 页面中的主要示例都不起作用。如果您打开实时示例并尝试它,只需单击它就可以了,您可以看到 url 中的路径发生了变化,但它只是更改了字符串,如果您复制您的 url 并发送它,路径并不真正存在对于某人,他们将收到以下错误:

地狱,即使你只是刷新页面,你也会得到同样的错误。

如果您想重现该问题,请打开此 URL:

https://angular.io/resources/live-examples/tutorial/ts/plnkr.html

单击实时预览右上角的“在单独的窗口中启动预览”按钮,等待它加载页面,当您看到 URL 更改为以下内容时:

http://run.plnkr.co/KMzM8hkaCyhlnf3b/dashboard

执行 F5 刷新页面,您将收到错误消息。

这是一个错误,它应该工作的方式,还是他们甚至没有尝试过的东西?他们是否已经从一个糟糕的路由器实施重新开始,或者我只是完全迷失了我如何让它工作?请指教 !

我猜我最好使用主题标签实现。

0 投票
1 回答
1104 浏览

angular - 如何在 url 路径中没有附加斜线的情况下实现 angular2 嵌套组件路由

我正在使用 angular2 构建一个单页应用程序,它需要根据应用程序的路由呈现不同的应用程序模板。在最高级别,它应该能够在主应用程序模板和应用程序的管理模板之间切换。

路由规则:

  • 如果 url 路径以 /auth 开头,则它由 AuthApp 处理
  • 如果它以其他任何内容开头,则应由 MainApp 处理

执行:

为了实现这一点,我有一个最高级别的组件应用程序,它将责任委托给 AuthApp 或 MainApp,就像这样。

然后每个子应用程序(例如 AuthApp、MainApp)都有自己的路由定义,例如这样。

从功能上和从设计的角度来看,这很好用!

问题:

在主应用程序中,应用程序的路由配置未指定路径(例如/...=> MainApp),我不想要嵌套的 url 路径。例如,如果您通过应用程序 (routerLink) 导航到 CurrentVacancys,它会更新 url 并在前面添加一个多余的正斜杠。.../#//current-vacancies当我希望它读取 url 路径时,它现在看起来像这样.../#/current-vacancies

当您.../#/current-vacancies在地址栏中键入时,应用程序路由实际起作用,它会正确转换。然而,通过应用程序 routerLink 指令导航会添加不需要的正斜杠。

我从逻辑上理解为什么会发生这种情况,委托给 MainApp 的根组件的路径为“/”,并且它与它的子组件连接在一起形成一个完整的 url 路径。但在这种情况下,不希望有额外的斜线。任何想法如何删除它,或以某种方式覆盖此行为。

顺便说一句,我已经考虑将 MainApp 组件路由移动到最顶层,虽然这确实解决了我报告的 url 路径问题,但它不允许我在顶层切换模板。

总之

请帮助我,要么

  • 如何删除/主应用程序路线上不需要的"preferred option",或
  • 如何设计应用程序以具有可切换的顶级模板和嵌套组件路由。

谢谢

0 投票
0 回答
287 浏览

angular - 使用嵌套路由定义时如何从 angular2 ComponentInstruction 获取完整的 urlPath?

我正在使用带有嵌套路由定义的 angular2,例如/auth/login实际上是按路径段分层拆分,父组件将路由匹配/auth/...到 Auth 组件,而 Auth 组件依次处理/login/reset

我遇到的问题是,当我ComponentInstruction在 custom 中截获路由时RouterOutlet,组件指令仅包含它自己的路径段。

使用上面的例子,组件指令 urlPath/auth/login只包含login它的 urlPath 值。我真正想要的是访问完整的 urlPath,或者某种可靠地重建此路径的方法?

0 投票
4 回答
16488 浏览

redirect - 使用Angular2,如何在登录重定向之前重定向到以前的url

使用 Angular2 创建单页应用程序,我在自定义中拦截未经身份验证的用户对非公共路由的访问,RouterOutlet并将它们重定向到登录视图。成功登录后,我想将用户重定向到他们最初请求的视图,而不是默认视图。

我注意到Router有一个renavigate()功能可以导航到最后一条成功的路线,但最后一条成功的路线是/auth/login而不是最初请求的 url。

基本上:如何访问或确定先前请求的 url?

我真的不想求助于传递查询字符串参数,除非我真的必须这样做。history理想情况下,作为组件的一部分访问集合会很好Router,类似于backbone.history

0 投票
1 回答
768 浏览

angular - 具有嵌套状态的Angular2路由

我有一个登录页面,它将显示用户(默认情况下)和“注册”组件,这是一组允许他们注册的输入字段。

对于返回用户,我希望他们按原样查看登录页面,然后单击“登录”并将注册组件替换为登录组件。我不希望 URL 改变,它应该保持 '/'。

对于 ui-router 我可以做嵌套状态,但不确定 Angular2 的路由器是否支持它?

应用程序.ts

登陆.ts

着陆组件的路径是否需要不同?