1

我正在尝试在智能手机上显示我的联系人列表。我可以做到这一点,但要求显示列表的唯一方法是通过 ng-click 调用 findcontact() 函数。

我试图从控制器中调用 findcontact() 函数,但没有运气。

如何在不单击此按钮的情况下显示此列表?

首先是javascript,然后是HTML。

angular.module('starter.controllers', [])

.controller('contacts2', ['$scope', 'PhoneContactsFactory', function($scope, PhoneContactsFactory) {
    
	$scope.findContact = function()
    {
        PhoneContactsFactory.find().then(function(contacts)
        {
            $arr = [];
            for (var i = 0; i < contacts.length; i++)
            {
				$arr.push({name: contacts[i].name.formatted})
			}
            $scope.contacts = $arr;
        });
		
    };
}])

.factory("PhoneContactsFactory", ['$q', function($q)
{
    return {
        find: function()
        {
            var deferred = $q.defer(); // asynchronous
            var options = new ContactFindOptions();
            options.multiple = true;
            var fields = ["displayName", "name"];
            
            navigator.contacts.find(fields, 
				function(contacts){ deferred.resolve(contacts); }, //onsuccess
				function(error){ deferred.reject(error); }, // onerror
				options);
            return deferred.promise;
        }
	};
}]);
<div ng-controller="contacts2">
    <button ng-click="findContact()">Push 2</button>
	<ion-list>
	    <ion-item ng-repeat="contact in contacts">
	      {{contact.name}}
	    </ion-item>
	  </ion-list>
	</div>

非常感谢 !

yts

4

1 回答 1

2

最后一个简单的解决方案来自关于#ionic irc chan的讨论。问题是竞争条件。由于联系人列表仅在cordova重新加载页面时显示,我认为问题可能与第一次加载时未准备好的插件有关。

所以我用 $ionicPlatform.ready(function()) 更新了我的控制器代码,它现在运行良好。

最新代码在这里:https ://github.com/lennycartier/ionic-contactlist

有关此(简单)问题的非常有趣的文章,请参阅 raymondcamden.com 博客。

还有我的小文章:http ://www.datanotes.org/13-ionic-framework-and-deviceready

yts

于 2014-12-18T20:09:32.173 回答