Angular请求防抖处理第一次请求失效问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Angular请求防抖处理第一次请求失效问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2317字,纯文字阅读大概需要4分钟。
内容图文
![Angular请求防抖处理第一次请求失效问题](/upload/InfoBanner/zyjiaocheng/332/af3915fa1ce949d19fdf807341a27c9d.jpg)
问题:
根据项目中的需求,需要设计一个下拉框,在输入时根据内容提供实时的建议,在此我们使用了如下组件,
<p-autoComplete [(ngModel)]="text" [suggestions]="results" (completeMethod)="search($event)"> </p-autoComplete>
因为我们需要根据输入内容实时的查询后台返回结果,如果每次更改都要传给后台的话,太耗费资源,而且对用户也不友好,为此我们采用了angular的请求防抖做处理,代码如下。
packages$: Observable<NpmPackageInfo[]>; private searchText$ = new Subject<string>(); search(packageName: string) { this.searchText$.next(packageName); } ngOnInit() { this.packages$ = this.searchText$.pipe( debounceTime(500), distinctUntilChanged(), switchMap(packageName => this.searchService.search(packageName, this.withRefresh)) ); }
作用如下:
debounceTime(500) - 等待,直到用户停止输入(这个例子中是停止 1/2 秒)。
distinctUntilChanged() - 等待,直到搜索内容发生了变化。
switchMap() - 把搜索请求发送给服务。
但当我们使用的时候发现在初始化第一次请求的时,并不会调用service的方法,错误代码如下:
private searchText$ = new Subject<string>(); packages$: Observable<InstrumentAlias[]>; ngOnInit() { // 创建可观察着对象 this.packages$ = this.searchText$.pipe( debounceTime(500), distinctUntilChanged(), switchMap(packageName => this.instrumentAliasService.queryInstrumentAliasByName(packageName)) ); } this.searchText$.next(this.queryName); this.packages$.subscribe((instrumentAliases: Array<InstrumentAlias>) => { this.filteredinstrumentAlias = instrumentAliases; }, () => { console.log('get instrumentAliases error'); });
searchText$ 是一个序列,包含用户输入到搜索框中的所有值。 它定义成了 RxJS 的 Subject 对象,这表示它是一个多播 Observable,同时还可以自行调用 next(value) 来产生值,在上面错误的代码中,因为我们先调用的时next方法,这是虽然产生了值,但是还没有进行订阅,所以第一次的值并不会向后台发起请求,而之后因为我们已经订阅了这个东西,所以第一次请求之后的请求都有效果。
结果方法:
在初始化的时候就进行订阅,这样在之后的查找我们只需要使用next传值即可,我们已订阅的对象就会自动触发后台请求。
总结:
写功能的时候只是简单的对代码进行复制粘贴,并没有真正的理解angular的观察者的设计机制,通过这个错误加深了对angular观察者的理解。
以上所述是小编给大家介绍的Angular请求防抖处理第一次请求失效问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
内容总结
以上是互联网集市为您收集整理的Angular请求防抖处理第一次请求失效问题全部内容,希望文章能够帮你解决Angular请求防抖处理第一次请求失效问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。