最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • ngFor 循环列表 保持滚动条位置

    正文概述 掘金(一只旁观的猫)   2021-01-13   575

    ngFor 如何工作?

    ngFor循环的列表发生变化时, ngFor会尽量避免完全重构列表的DOM元素。许多DOM元素会被重用, 这些元素的一些属性值可能会改变。

    ngFor默认跟踪列表元素的方式是使用对象标识。这就意味着如果你使用一个和原来列表内容完全一样的新对象, 把新对象传到ngFor,angular是没办法辨别这个对象是不是已经存在的。从对象标识的角度来说,新的列表包含一套全新的内容, 跟原来的列表完全不一样。因为angular不知道应该用什么属性来跟踪对象的变化, 所以这种默认方式是合理的。

    弊端:

    1. 在列表很大的情况下(或者列表占了屏幕的很大一部分时), 用这种默认的方式会导致页面加载很慢(很多DOM要被销毁重建)

    2. 如果列表被重新加载, 加载完成后滚动条会跑到列表底部(对用户不友好)

    使用 trackBy

    使用trackBy我们可以自己定义ngFor的跟踪机制。首先我们要在ngFor里给trackBy传一个函数, 这个函数有两个默认参数(名称可以自己起),如:

    • index   当前循环到的对象的索引

    • item     当前循环到的对象

    栗子:

    @Component({
       selector: 'heroes',
        template:`
        <table>
            <thead>
                <th>Name</th>
            </thead>
            <tbody>
                <tr *ngFor="let hero of heroes; trackBy: trackHero" >
                    <td>{{hero.name}}</td>
                </tr>
            </tbody>
        </table>
        `
        })
        export class Heroes {
            heroes = HEROES;
            trackHero(index, hero) {
                console.log(hero);
                return hero ? hero.id : undefined;
            }
        }
    

    上面这个例子会使用hero的id属性作为ngFor跟踪列表的依据。使用trackBy可以避免上文中的两个使用ngFor默认跟踪机制的弊端。


    起源地下载网 » ngFor 循环列表 保持滚动条位置

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元