问题描述:使用Angular+NGZORO时候,组件库的下拉框或时间选择框会出现滚动页面,然后漂移的问题。实际的想法是,滚动页面的时候,要么下拉框消失,要么随着页面滚动。
原因:找了一下资料,发现原因是选择框组件是被挂在到全局父节点上,所以会随着页面滚动而移动。
解决方案:响应式编程RXJS,实现滚动页面时候,使得下拉框自动消失。
首先提供的API ,[NzOpen]来控制下拉框的显示。
那么想法就是,当用户滚动的时候会发出一个流stream,以此创建一个可观察对象observable。关闭的方法放在观测者observer当中。
另外,Subscription用来表示一段流的处置过程。简单来说就是 subscription = observable(observer)
这样可以使用subscription来释放资源,优化性能。
当页面初始化的时候,使用fromEvent()新建一个可观测流
this.scrollSubscription = fromEvent(
document.getElementById('xxx'),
'scroll'
).subscribe(() => {
//将 NzOpen关闭的方法 变量赋值为false
});
最后当NgDestory的时候,释放subscription,节约资源
this.scrollSubscription?.unsubscribe();
2022/8/19 加入一些新的思考🤔
在Angular中哪些数据流是需要unsubscribe()的?如果我监听一个滚轮事件,到底对性能提升有多大影响。
2022/8/19 思考解决