angular - 反应式地根据路由在同一容器中的不同http请求[RXJS]
问题描述
我有一个容器,里面有两个展示组件。
主要成分
<div>
<app-search></app-search>
<app-table></app-table>
</div>
该app-search
组件有一个简单的表单,您可以在其中选择一个year
,month
然后单击search
info以 s 上升,主容器中有一个 http 请求,info以s@Output()
下降。app-table
@Input
然后,有一个导航栏,其中包含大约 10 条不同的路线。在每条路线上,用户请求查看有关不同地点的信息,但所有结果都适合同一<app-table>
组件。
我想要做的是获取最后一个字符串url
并在不同http
的请求之间进行选择(在 .service.ts 文件中)。每个http
请求都有这个形状。
getSomething(cod: number, year: number, month: number) {
const url = `123.123.123/ta&${cod}:${year}:${month}
return this.http.get<SomeType>(url)
}
我想了很久if/else
,但我想反应。不幸的是,我没有成功。
总之。我想http
根据url
. 我怎样才能制作一个流并编排它?
我对此的思考过程如下:
1. 在我auth.service.ts
的cod
(保留在 sessionStorage 中)的获取器中
2.BehaviorSubject
在我的中设置一个main.service.ts
存储当前 url 的最后一个字符串的字符串。
3. 设置BehaviorSubject
s 为: year
, month
, 和lastUrlString
4. 设置改变BehaviorSubject
' 值的方法.next
。每个5个。在容器中当用户更改year
或month
单击时search
调用subject.next(value)
方法并更改年份和月份。
在这之后。我在可观察、订阅、取消订阅等方面做了很多事情。我总是遇到不同的错误。
问候。
解决方案
我不确定我是否完全理解您的问题,但这里有一个基于我认为您想要做的答案。如果您的 url 看起来像这样,您应该使用激活的路由来获取当前参数,或者如果您的 url 看起来像这样/url/:param
,则获取当前查询/url?param=value
。
当您希望为您的服务提供信息时,您将使用 ActivatedRoute 创建一个可观察对象,该可观察对象将在您使用导航栏导航时进行 api 调用。
export class SomeService {
tableInfo$ = this.route.paramMap.pipe(
filter(paramMap => !!paramMap.get("param"))
switchMap(paramMap => this.http.get('/api/' + param.get("param"))
);
constructor(private route: ActivatedRoute, private http: HttpClient) {}
}
您可以使用 AsyncPipe 在模板中订阅此 observable,也可以仅订阅 ngOnInit。
推荐阅读
- sql - SQL 查询(显示所有 'x',其中 'x' 不在表 '2' 中的字段 'y' 并且具有 'z' 标志)
- javascript - 使用 HtmlWebpackPlugin minify.minifyJS 时我应该使用 webpack UglifyJSPlugin 吗?
- python - 尝试使用 GridSearchCV sklearn 拟合 X、y 时出现网格搜索交叉验证错误
- java - Java - 将用户的输入(包含整数和双精度数)转换为数组
- azure - 有没有办法使用多个策略来验证 B2C 应用程序
- plot - 使用方程在gnuplot中绘制曲线
- angular - 使用 ngrx/selector 和 ngrx/entities 接收具有特定键的数组
- sql - 为什么我在对具有相似列名的 2 个表进行内部连接时收到“列名重复”错误?
- php - 如何在数据库中插入主键而不是名称列
- c - 如何丢弃在睡眠功能期间传递的用户输入?