gpt4 book ai didi

Angular 2 : How to use observables to debounce window:resize

转载 作者:太空狗 更新时间:2023-10-29 16:57:43 24 4
gpt4 key购买 nike

所以我想找出一种方法来消除 window:resize 使用 observables 的事件,所以只有在用户停止调整窗口大小或经过一段时间没有大小变化(比如 1 秒)后才会调用某种函数。

https://plnkr.co/edit/cGA97v08rpc7lAgitCOd

import {Component} from '@angular/core'

@Component({
selector: 'my-app',
providers: [],
template: `
<div (window:resize)="doSmth($event)">
<h2>Resize window to get number: {{size}}</h2>

</div>
`,
directives: []
})
export class App {
size: number;
constructor() {
}

doSmth(e: Event) {
this.size = e.target.innerWidth;
}
}

只是一个使用 window:resize 的简单示例,并显示它会立即使用react(使用“在单独的窗口中启动预览”)。

最佳答案

我认为您不能使用 observable 以这种方式去抖动。事实上,现在不支持开箱即用的东西,但是有一个悬而未决的问题:

为了实现您的目标,您可以直接使用 Observable.fromEvent 来获取此事件的可观察对象。因此,您可以在此可观察对象上应用 debounceTime 运算符。

这是一个示例:

@Component({
(...)
})
export class App {
size: number;
constructor() {
Observable.fromEvent(window, 'resize')
.debounceTime(1500)
.subscribe((event) => {
this.doSmth(event);
});
}

doSmth(e: Event) {
console.log('do smth');
this.size = e.target.innerWidth;
}
}

查看此插件:https://plnkr.co/edit/uVrRXtnZj8warQ3qUTdN?p=preview

关于 Angular 2 : How to use observables to debounce window:resize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com