Angular 使用 Rxjs 实现Url的监控与修改
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Angular 使用 Rxjs 实现Url的监控与修改,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2256字,纯文字阅读大概需要4分钟。
内容图文
Angular 使用 Rxjs 实现Url的监控与修改
需求
? 需要实现页面的操作记录在url上(包括翻页、查询等信息)
? 复制url到其它电脑或者浏览器可以呈现出原页面的数据
思路
? 页面操作实际是进行url的修改
? 当url改变时 页面数据变更
页面逻辑:
- 用户操作页面 进行url修改
- 监控url变更
- 根据url变更获取数据 更新页面信息
实现
有了思路就开始实现
首先实现一个修改url的function
考虑到可能有很多component需要修改url 而且url的组成都是 router + params 所以我们可以写一个公共的 setParams
/*
urlData 中包含url信息
router : url router 地址
queryParams : url参数 (调用setParams 之前拼接好)
*/
setParams(urlData: any): void {
this._router.navigate([urlData.router],
{
queryParams: {
params: JSON.stringify({urlData.queryParams}) // 这里使用JSON打包参数是为了保留数据的格式
}
}
);
}
然后我们需要用 Rxjs 的 subject 封装下这个 function
export class appService {
private setUrlParamsSubject = new Subject<string>();
setUrlParamsOb$ = this.setUrlParamsSubject.asObservable();
constructor() {
this.setUrlParamsOb$
.subscribe((row) => {
this.setParams(row);
});
}
setUrlParams(params: any): void {
this.setUrlParamsSubject.next(params);
}
}
这样的话 其它所有的component 只需要调用this.appService.setUrlParams(params)
就可以进行url的修改
监控url的变化
这里使用router 中 ActivatedRoute 的方式监控url的变化
由于url添加参数的方式有两种 我这里是同时监控了两种参数变化
export class AppComponent implements OnInit {
constructor(
private _router: Router,
private _routerInfo: ActivatedRoute,
) {
merge(this._routerInfo.queryParams, this._routerInfo.params)
.subscribe((params: any) => {
// 对参数进行解析
this.getParams();
});
}
}
这样 我们就可以在每次url发生变化时候 在getParams 方法进行参数的解析
可是这样 我们只有AppComponent 这个component可以获得解析后的url参数
所以就需要下一步的操作
url 变化后 获取到url参数
这里的思路是和setUrl一样的 使用Rxjs 中的subject
subject 可以被订阅 这里使用subject 进行分发
所以思路就是
-
设定一个getUrlParamsSubject 的 subject
-
在任意一component 订阅这个 subject
-
当getParams()解析完 数据之后 调用 getUrlParamsSubject.next(data) 的方法
-
在订阅 getUrlParamsSubject 的 next方法中就可以获得这个参数的data
看下代码实现吧
// app.service.ts
private getUrlParamsSubject = new Subject<string>();
getUrlParamsOb$ = this.getUrlParamsSubject.asObservable();
getUrlParams(params: any): void {
this.getUrlParamsSubject.next(params);
}
// app.component.ts
getParams(): void {
console.log(this._routerInfo.snapshot.queryParams) // 获取url参数
/*
... //这里是处理参数
*/
this.appService.getUrlParams(paramsData);
}
// 任意component
this.appService.getUrlParamsOb$
.subscribe((row: any) => {
console.log(row) // 获得处理后的url参数
});
最后只需要根据参数去更新页面信息就可以了
原文:https://www.cnblogs.com/nhxz001/p/14898388.html
内容总结
以上是互联网集市为您收集整理的Angular 使用 Rxjs 实现Url的监控与修改全部内容,希望文章能够帮你解决Angular 使用 Rxjs 实现Url的监控与修改所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。