Angular 如何在不改变 URL 的情况下使用参数进行路由
Angular how to route with parameters without changing the URL
TL;DR;我想路由到一个没有 URL 指示基础数据的参数的页面。
我有两个组件。组分 A 和 B。
我想要实现的是通往 B 的路线,但我需要来自 A 的一些参数。
我知道我可以通过像这样 [/B:parameter] 设置路由来路由到 B。我的问题是它将 URL 从 localhost:4200/b 更改为类似 localhost:4200/b=? 的参数。我想对用户隐藏参数:
-一个:与他们无关
- 二:可能包含敏感的业务逻辑和/或数据。
目前我只是将一个常量设置为适当的状态并在B的onInit上读取它但是感觉很不优雅,应该有更好,更优雅的方式来做事。
坦率地说,它运作良好,但我不喜欢它。我应该如何处理它?
简答:导航时在路线中传递数据。
说明:
您可以在 Route 文档中找到数据参数 (https://angular.io/api/router/Route)
示例:
在路由模块中:
path: 'auth', component: AuthComponent, data: { type: 'admin' }
在 AuthComponent 中,您可以使用 ActivateRoute 获取类型数据
constructor(
private activatedRoute: ActivatedRoute
) {
this.type = this.activatedRoute.snapshot.data.type;
}
所以你会问:如何在路由时动态传递数据?
请检查一下:
您可以更改浏览器 url 而不会触发任何导航,例如:
window.history.replaceState(undefined, '', '#newdata');
参见:https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
但要小心!
TL;DR;我想路由到一个没有 URL 指示基础数据的参数的页面。
我有两个组件。组分 A 和 B。 我想要实现的是通往 B 的路线,但我需要来自 A 的一些参数。 我知道我可以通过像这样 [/B:parameter] 设置路由来路由到 B。我的问题是它将 URL 从 localhost:4200/b 更改为类似 localhost:4200/b=? 的参数。我想对用户隐藏参数:
-一个:与他们无关
- 二:可能包含敏感的业务逻辑和/或数据。
目前我只是将一个常量设置为适当的状态并在B的onInit上读取它但是感觉很不优雅,应该有更好,更优雅的方式来做事。 坦率地说,它运作良好,但我不喜欢它。我应该如何处理它?
简答:导航时在路线中传递数据。
说明: 您可以在 Route 文档中找到数据参数 (https://angular.io/api/router/Route)
示例: 在路由模块中:
path: 'auth', component: AuthComponent, data: { type: 'admin' }
在 AuthComponent 中,您可以使用 ActivateRoute 获取类型数据
constructor(
private activatedRoute: ActivatedRoute
) {
this.type = this.activatedRoute.snapshot.data.type;
}
所以你会问:如何在路由时动态传递数据?
请检查一下:
您可以更改浏览器 url 而不会触发任何导航,例如:
window.history.replaceState(undefined, '', '#newdata');
参见:https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
但要小心!