Получить все контакты хотя бы один номер телефона в плагине ngCordova Contacts

Я использую плагин контактов ngcordova, чтобы получить контакты в приложении. Я хотел бы знать, возможно ли получить только контакты, которые имеют хотя бы один номер телефона.

Я использовал следующий код, он возвращает мои контакты Google, которые содержат электронную почту, но не номера телефонов. Но я хочу только доступный номер телефона, а не электронные письма. Это возможно? или любой другой вариант, доступный для получения этого результата.

$scope.getContactList = function() {
         $ionicLoading.show({
            template: 'Loading...'
        });
        var options = {};
        options.multiple = true;
        options.hasPhoneNumber = true;
        options.fields = ['name.formatted', 'phoneNumbers'];
        $cordovaContacts.find(options).then(function(result) {
            $scope.contacts = result;
            $ionicLoading.hide();

        }, function(error) {
            console.log("ERROR: " + error);
        });
    }

2 ответа

Решение

Я получил решение без использования каких-либо внешних JS, код, который выглядит следующим образом:

$scope.getContactList = function() {
      $scope.contacts = [];
             $ionicLoading.show({
                template: 'Loading...'
            });
            var options = {};
            options.multiple = true;
            $cordovaContacts.find(options).then(function(result) {
                 for (var i = 0; i < result.length; i++) {
                    var contact = result[i];
                     if(contact.phoneNumbers != null)
                       $scope.contacts.push(contact);
                  }
                $ionicLoading.hide();
            }, function(error) {
                console.log("ERROR: " + error);
            });
    }

Я бы предложил использовать http://underscorejs.org/ для фильтрации результатов контактов. Нечто подобное должно соответствовать вашим потребностям:

$scope.getContactList = function() {
     $ionicLoading.show({
        template: 'Loading...'
    });
    var options = {};
    options.multiple = true;
    options.hasPhoneNumber = true;
    options.fields = ['name.formatted', 'phoneNumbers'];
    $cordovaContacts.find(options).then(function(result) {
        $scope.contacts = result;

        var contactsWithAtLeastOnePhoneNumber = _.filter(result, function(contact){
            return contact.phoneNumbers.length > 0
        });

        //
        // Contacts with at least one phone number...
        console.log(contactsWithAtLeastOnePhoneNumber);

        $ionicLoading.hide();

    }, function(error) {
        console.log("ERROR: " + error);
    });
}

Поскольку phoneNumbers массив может быть возвращен и быть пустым, этот быстрый метод гарантирует, что присутствует хотя бы одна запись.

Другие вопросы по тегам