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

Kal*_*are 5 android ios angularjs cordova ionic-framework

我正在 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);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

下面是将联系人分配给 $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);
  });

});
Run Code Online (Sandbox Code Playgroud)

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

我还在获取联系人时搜索了分页,但在 ngCordova 文档中找不到任何明智地获取联系人页面的选项。
到目前为止,我正在 android 上进行测试,并且在联系人计数约为 1000 的情况下应用程序会挂起。
如何提高其性能?我是 angular 和 ionic 的新手。

小智 0

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

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

希望这可以帮助。