У меня есть 2 выбора тегов для страны и штата. В настоящее время они работают с начальными строковыми значениями, установленными переменными в контроллере angular. Я хочу получить эти 2 переменные из службы, которая имеет геокодирование W3C и google-map address_components, и установить с ними HTML-шаблон при загрузке страницы.
У меня много проблем, но сначала я хочу, чтобы жестко запрограммированный объект в службе обновлял контроллер, который, в свою очередь, обновлял HTML. Я потратил много времени на эту передачу данных, и я не могу получить ее. Затем я изменю жестко закодированный объект, чтобы передать ему данные о местоположении из google-map, что я делал раньше.
HTML-код:
<select id="country"data-ngmodel="cntrl.input.countrySelected"
data-ng-options="country.code as country.text group by country.continent for country in cntrl.input.countries" >
</select> //cntrl.input.countries is set from a factory via the controller
<select id="state" data-ng-model="cntrl.input.stateSelected"
data-ng-options="state.code as (state.code + ' - ' + state.text) for state in cntrl.input.state" >
</select> //cntrl.input.state is set from a factory via the controller
Я использую контроллер as, и соответствующий код контроллера:
//cntrl.input.countrySelected = "US"; //hard coded works
//cntrl.input.stateSelected = "NY"; //hard coded works
//Edited, though still not working. Now just
cntrl.input.countrySelected = getUserGeolocateService.getUserLocation();
//cntrl.input.countrySelected = function initialCountry() {
//getUserGeolocateService.getUserLocation() //getUserLocation from getUserGeolocateService in getUserGeolocate.service.js
//.then( function( locationName4 ) {
//return locationName4[country]; //object containing country and state
//});
//}
Я не могу заставить это работать, поэтому я ничего не написал для установки переменной начального состояния. Это будет тот же формат, что и инструкция для рабочей страны.
Я попытался сделать сервисный код похожим на другой метод/функцию, которая работает для предоставления разных данных о местоположении. Я новичок в обоих сервисах и обещаниях. Соответствующий код для службы angular:
(function() { "use strict";
angular.module( "residenceApp" ).service( "getUserGeolocateService", function( $http, $q, uiGmapGoogleMapApi ) {
this.getUserLocation = function(){
var countryCode, stateCode, county, location4;
var deferred = $q.defer();
location4 = {};
location4 = { "country": "US", "state": "NY"};
deferred.resolve( location4 );
console.log("country & state:" + locationName4); //does not fire
return deferred.promise;
};
});
Этот код делает тег выбора активным — нажатие на стрелку вниз открывает раскрывающийся список, который можно выбрать. Первоначальный тег select пуст, а для countrySelected ничего не задано. Жестко закодированный объект locationName4 должен установить один выбор в США, а другой — в Нью-Йорк, если служба и функции контроллера работают правильно. Код ng-options принимает код страны и использует его для отображения текста названия страны.