【问题标题】:How to use infinite scroll in my contact list如何在我的联系人列表中使用无限滚动
【发布时间】:2019-12-10 18:41:02
【问题描述】:

我正在使用 ionic 4 并尝试使用无限滚动来避免联系人列表显示缓慢。 但不知道如何正确使用这个设施。请帮忙。 有没有其他方法可以在我的应用中快速加载联系人列表。 显示时间过长。请提出一些宝贵的建议。我为此苦苦挣扎了 2 或 3 天。

在我的 .ts 文件中

contactList: any[] = [];  

constructor(public navCtrl: NavController,private router: Router, 
     private contacts: Contacts , private sanitizer: DomSanitizer,) {       
    this.fetchDeviceContact();
}

fetchDeviceContact(){

    this.contacts.find(["displayName", "phoneNumbers","photos"], {multiple: true}).then((contacts) => {

      for (var i = 0; i < contacts.length; i++) {
        if (contacts[i].displayName !== null) {
           var name  = contacts[i].displayName;
           var number =  contacts[i].phoneNumbers[0].value;
           if(contacts[i].photos !== null){
           var photo = this.sanitizer.bypassSecurityTrustUrl(contacts[i].photos[0].value);
           }else{
            photo = '';
           }

            var contactData={
                                "displayName":name,
                                "phoneNumbers":number,
                                "logo":photo,                             
                            }

          this.contactList.push(contactData);

           this.contactList.sort(function(a, b) {
             return compareStrings(a.displayName, b.displayName);
          });  

        }
      }

    });

    function compareStrings(a, b) {
                var nameA = a.toUpperCase(); 
                var nameB = b.toUpperCase(); 

                if (nameA < nameB) {
                    return -1;
                }
                if (nameA > nameB) {
                    return 1;
                }

                return 0;
    }

 loadData(event) {
    setTimeout(() => {
      console.log('Done');
      event.target.complete();

      if (data.length == 1000) {
        event.target.disabled = true;
      }
    }, 500);
  }

  toggleInfiniteScroll() {
    this.infiniteScroll.disabled = !this.infiniteScroll.disabled;
  }
}

.html 文件中

<ion-content padding >
     <ion-content padding >
      <ion-searchbar  ></ion-searchbar>
      <ion-list  *ngFor="let contact of contactList; let i = index;" >   <!-- {{contact | json}} -->
      <ion-item >
      <ion-grid>
      <ion-row>
        <ion-col>
          <div>
            <ion-img [src]="contact.logo"></ion-img><img [src]="contact.logo">
            <ion-icon ios="ios-person" md="md-person"></ion-icon> <b>  {{contact.displayName}}</b>
          </div>
        </ion-col>
        </ion-row>
      <ion-row>
        <ion-col  size="10">
          <div>
            <ion-icon item-start  ios="ios-call" md="md-call" ></ion-icon> {{ contact.phoneNumbers}}
          </div>
        </ion-col>
      </ion-row>
    </ion-grid>
    </ion-item>
    </ion-list>


<ion-infinite-scroll threshold="100px" (ionInfinite)="loadData($event)">
    <ion-infinite-scroll-content
      loadingSpinner="bubbles"
      loadingText="Loading more data...">
    </ion-infinite-scroll-content>
  </ion-infinite-scroll>

</ion-content>

【问题讨论】:

  • 无限滚动不负责联系人列表显示缓慢。并且加载缓慢可能是由于离子原生插件和联系人的长度。
  • 我想使用无限滚动来避免加载缓慢。但不知道如何使用它
  • 获取联系人后会无限滚动。您必须减少获取时间以实现快速加载。
  • 你能推荐一些代码
  • @AjayKrishnaDutta,event.target.complete();之后你需要加载下一个数据并添加到联系人列表中

标签: angular ionic-framework ionic3 ionic4 ionic-native


【解决方案1】:

使用切片管道解决:

.ts 文件:

slices: number = 10;
loadData(event) {

    setTimeout(() => {
      this.slices += 15;
      event.target.complete();
    }, 100);

  }

.html 文件:

<ion-list  *ngFor="let contact of contactList | slice:0:slices; " > 
</ion-list>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2016-05-17
    • 2018-12-31
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多