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

Posted

技术标签:

【中文标题】在 AngularJS 中使用 ngCordova 检索超过 1000 个联系人【英文标题】:Retrieving more than 1000 contacts using ngCordova in AngularJS 【发布时间】:2015-01-24 09:43:36 【问题描述】:

我正在 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,应用程序会挂起。 我怎样才能提高它的性能? 我是角度和离子的新手。

【问题讨论】:

你找到优化这个的方法了吗?提前致谢。 【参考方案1】:

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

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

希望这会有所帮助。

【讨论】:

是的,使用 BindOnce 将节省渲染时间,但我需要两种方式绑定来按用户选择联系人。插件中的联系人也加载缓慢。 1.您的服务器响应您的请求的速度有多快。您可以在开发人员工具--> 网络选项卡中检查。您是否尝试过 ng-infinite-scroll 并以位异步加载数据。 服务器在这里没有问题。数据在设备本身中。我正在从移动设备中获取联系人,并且应用程序在移动设备中。

以上是关于在 AngularJS 中使用 ngCordova 检索超过 1000 个联系人的主要内容,如果未能解决你的问题,请参考以下文章

Ionic+AngularJS 开发之『个人日常管理』App

Ionic+AngularJS 开发之『个人日常管理』App

使用 Ionic / ngCordova 将相机/屏幕方向锁定为横向

从后台安排本地通知(Ionic + ngCordova)

访问存储在 ngCordova/ionic iOS 应用程序中的 mp3 文件

具有离子框架的 ngCordova 地理定位