У меня есть приложение 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 рендеринга страницы.