【问题标题】:Apache cordova var not displayed in htmlApache cordova var 未显示在 html 中
【发布时间】:2016-12-07 22:39:02
【问题描述】:

我在 android 上使用 angular & apache cordova 开发的应用程序有问题。

首先,我从智能手机中获取联系人列表并将其存储在 var 中:$scope.listecontacts

  // alert('nb contacts '+contacts.length);
             for (var i = 0; i < contacts_1.length; i++) 
             {



                    if(contacts_1[i].phoneNumbers != null && contacts_1[i].name != null && typeof contacts_1[i].phoneNumbers != 'undefined')
                    {

                               if($scope.numero_tel==0)
                              {
                                $scope.numero_tel = contacts_1[i].phoneNumbers[0].value;
                              }

                               $scope.listecontacts.push(contacts_1[i]);

                    }

                } 

第二次我尝试像这样在 html dom 中显示它:

 <div ng-repeat="t in listecontacts"   >{{(t.name.formatted)}}</div>

当我启动我的应用程序时,它运行良好,但是当我返回主页然后进入获取联系人列表的视图时,DIV 未填充联系人列表。

我检查了变量:$scope.listecontacts,它不为空......

有人遇到过这个问题吗?

你有什么想法吗?

非常感谢!

【问题讨论】:

  • $scope.listecontacts 确实被销毁了,它没有被保留,您需要使用 get 方法创建一个服务,该方法返回数组并将该服务合并到您的代码中。
  • 尝试和console.log() 什么时候显示视图,对于初学者来说,我们应该知道当你进行查询时,它会比显示的视图花费更长的时间,最重要的是你必须预计除了查询时间之外,您还获得了循环和 object.push() 函数。尝试在循环完成后更新变量……
  • 循环后如何更新变量?我在循环中尝试了这个: $scope.$apply(function () { $scope.listecontacts.liste_1.push(contacts_1[i]); });但没有效果:-/

标签: javascript android angularjs cordova


【解决方案1】:

我曾尝试以这种方式使用服务:

  app.factory('ContactService', function($window, $q, $rootScope){
                     var options = new ContactFindOptions();
                    options.filter = "";
                    options.multiple = true;
                   var filter = ["displayName", "name","phoneNumbers"];
                   // navigator.contacts.find(filter, onSuccess, onError, options);
    return {
        getContactList : function(onSuccess, onError){
            navigator.contacts.find(filter,function(contacts){
                $rootScope.$apply(function(){
                    onSuccess(contacts);
                })
            }, function(){
                $rootScope.$apply(function(){
                    onError();
                })
            }, options)
        }
    }
}) 

然后在我的控制器中:

$scope.get_contacts = function()
{

    /*alert('get_contacts');*/

         try
        {

         ContactService.getContactList(function(contacts)
        {

但没有任何问题,我通过 USB 和 Chrome 使用控制台检查变量,并且数组是具有 thje 值的文件,但 HTML 不显示数据。

【讨论】:

  • 你调用不正确,函数ContactService.getContactList(function(contacts)...不正确,需要这样调用ContactService.getContactList(function gotContacts(contactList){ ... }, function errContacts(){ ... })
【解决方案2】:

感谢您的帮助!

实际上我的服务运行良好,我只需要更改

这个:

  <option ng-repeat="t in listecontacts"  value="{{(t.phoneNumbers[0].value)}}" >{{(t.name.formatted)}}</option>

到这里

  <option ng-repeat="t in listecontacts.liste_1"  value="{{(t.phoneNumbers[0].value)}}" >{{(t.name.formatted)}}</option>

因为我使用对象而不是数组来表示“listecontacts”

     $scope.listecontacts=   { 
    liste_1: []
  };

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多