Ошибка Cordova Xcode в iPhone, но не в симуляторе - PullRequest
0 голосов
/ 02 марта 2019

У меня есть приложение cordova / ionic, которое я компилирую через командную строку, а затем внедряю на устройства / симуляторы из XCode.

В главном файле index.html приложения я загружаю локальный файл JS, который простомассивный объект для кодов стран / форматов телефонов и т. д.

<script type="text/javascript" src="js/cdjson.js"></script>

Файл представляет собой просто 1 строку минимизированного JS:

var _countries = {"country":
                    {"USA":
                       {"currency":
                          {"currencyCode":["USD"],
                           "currencyName":["United States Dollar"],
                            ...... }

И затем в контроллере я назначаю объект дляпеременная области действия:

  $scope.countries = _countries.country ;

Когда страница шаблона html загружается, имеется функция ng-init, вызывающая эту функцию для заполнения данных страны в меню <select>:

  $scope.selectPhone = function() {
    var cCode = $scope.userObj.regCountryPhone
    var cInfo = _countries.country[cCode] ;
    $scope.countryPhone = cInfo.phone ;   //iPhone only error HERE
    $scope.userObj.phoneCountryName = cInfo.info.shortName ;
    $scope.userObj.user_phoneCountry = parseInt(cInfo.phone.countryCode) ;
    $scope.phoneNumLengths = cInfo.phone.phone_number_lengths ;
    $scope.setInfo('user_phoneCountry') ;
    $scope.userObj.regCountryPostal = $scope.userObj.regCountryPhone ;
    $scope.selectCountry() ;
  } 

КогдаЯ развертываю свое приложение на симуляторе, вышеупомянутая функция ng-init работает чисто, все поля выбора / ввода корректно обновляются / форматируются в соответствии с требованиями страны.Во время ng-init страной <select> по умолчанию является США, и я вижу, что она выбрана в <select> при отображении страницы.

<select class="registerFields"
        style="width:20%;text-align:right;float:left;margin-top:3px;"
        id="regCountryPhone"
        ng-init="selectPhone(userObj.regCountryPhone)"
        ng-change="selectPhone();"
        ng-model="userObj.regCountryPhone">
   <option ng-value="" ng-if="false"></option>            
   <option ng-selected="pKey==userObj.regCountryPhone"
           ng-repeat="pKey in notSorted(countries)"
           ng-value="pKey">{{pKey}}
   </option>
</select>

Однако при развертывании на физическом iPhone я получаю undefined на cInfo.phone, когда страница отображается, а <select> ничего не выбрано.Но когда я нажимаю <select>, все страны перечислены и меняют выбранную опцию (скажем, «Канада»), она запускает ng-change (которая является той же функцией, что и ng-init), и, похоже, работает нормально.

На iPhone мне интересно, срабатывает ли ng-init до полной загрузки объекта в область $.Что здесь происходит и как я могу правильно проверить, что вызывает это?

ОБНОВЛЕНИЕ: Я переместил $ scope.countries = _countries.country в $ scope. $ On, чтобы убедиться, что он установлен перед страницей.начинает рендеринг.

  $scope.$on('$ionicView.beforeEnter', function() {
    $scope.countries = _countries.country ;
    console.log($scope.countries) ;
  });

console.log точно выплевывает весь объект, но я все еще получаю неопределенные ошибки объекта на этапе ng-init рендеринга страницы.

...