繁体   English   中英

使用AngularJS中的ngCordova检索超过1000个联系人

[英]Retrieving more than 1000 contacts using ngCordova in AngularJS

我正在开发一个Ionic框架中的应用程序,它显示从设备到最终用户的所有联系人,并提供选择联系人的选项。 我正在使用ngCordova的$ cordovaContacts模块来获取联系人。

这是从设备获取联系人的服务代码。

angular.module('starter.services').factory('ContactManager', function($cordovaContacts, $ionicLoading){
  return {
    getContacts: function() {
      $ionicLoading.show({ template: "<div class='ion-ios7-reloading'></div>"});
      var options = {};
      options.filter = "";
      options.multiple = true;
      options.fields = ['displayName', 'name', 'phoneNumbers', 'emails'];
      //get the phone contacts
      return $cordovaContacts.find(options);
    }
  }
});

下面是控制器代码,它将联系人分配给$ scope.contacts变量

angular.module('starter.ctrls').controller('ShareCtrl', function($scope, ContactManager, $stateParams) {

  $scope.contacts = [];

  ContactManager.getContacts().then(function(_result){
    alert("CONTACTS FETCHED: Now rendering in Template");
    $scope.contacts = _result;
   }, function(_error){
    alert("Error: " + _error);
  });

});

它适用于100-400个联系人。 但对于具有大约1000个联系人的设备,从插件中获取联系人需要花费大量时间(控制器中的CONTACTS FETCHED警报在2-3分钟后显示)。 从插件中获取联系人之后,再次花费2-3分钟在UI中呈现(使用ng-repeat)并且大多数时间应用程序挂起。

我还在获取联系人时搜索了分页,但在ngCordova文档中找不到任何选项来获取联系人页面。
截至目前,我正在测试Android,如果联系人数量大约为1000,应用程序会挂起。
如何改善其性能? 我是角和离子的新手。

我建议不要在一次显示100个联系人中加载100-400个联系人,因为当用户向下滚动时,您可以加载接下来的100个联系人。 要实现此目的,您可以使用此插件。 http://binarymuse.github.io/ngInfiniteScroll/

如果它们在只读联系人中,您可以使用“BindOnce”插件,这将改善范围绑定一次并使您的浏览器保持清晰。 https://github.com/Pasvaz/bindonce

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM