angular里使用iscroll时如何refresh?

发布于 2022-09-06 12:52:42 字数 669 浏览 24 评论 0

Angular的项目,引入了iscroll,d.ts文件也写好了,可以初始化没问题,但是当组件更新时,需要调用IScroll.refresh(),根据以往用其他MVVM框架的经验,直接在视图更新完毕的生命周期方法里调用IScroll.refresh()就行了:

import * as IScroll from 'iscroll'

export class Model_1{
    scroll : IScroll
    scroll_option = {click:true} as IScroll.IScrollOptions
    constructor(){   }
    ngAfterViewInit(){
        this.scroll = new IScroll(".scroll-wrapper",this.scroll_option)
    }
    ngAfterViewChecked(){
        this.scroll.refresh()
        console.log(123)
    }
    //....
 }
 

但此时问题出现了,iscroll加载后在滑动时会无限次触发ngAfterViewChecked()(控制台不断打印出123),导致视图无法正确刷新,请问有遇到过这种问题吗,是如何解决的呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓦然回首 2022-09-13 12:52:42

与react,vue不同,angular的ngAfterViewChecked()钩子会在视图发生任意重绘时触发,并不是像其他框架触发了render才有回调,解决方案是将重载iscroll的方法直接放置于ngAfterViewInit()中:

scrollRefresh(){
    setTimeout(()=>{
        this.scroll && this.scroll.refresh()
    },130)
}
ngAfterViewInit(){
    this.scroll = new IScroll(".scroll-wrapper", this.scroll_option)
    this.scrollRefresh()
}
爱格式化 2022-09-13 12:52:42

ngAfterViewChecked这个hook每次在检测组件内部自己的视图(view)和子组件的视图时都会调用,频率很高的。官网也说明了:

Notice that Angular frequently calls AfterViewChecked(), often when there are no changes of interest. Write lean hook methods to avoid performance problems.

你说的那个库没有使用过,不过refresh这种刷新逻辑一般不会频繁的触发吧,那只需要在需要触发的时候收到调用就可以了呀,没有必要写到ngAfterViewChecked生命周期函数中吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文