2015-03-09 2 views
0

У меня есть 2 входа для ввода тегов для страны и штата. В настоящее время они работают с начальными строковыми значениями, заданными переменными в угловом контроллере. Я хочу получить эти 2 переменные из службы с геокодированием W3C и URL-адресами google-map и установить шаблон 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 

Я использую контроллер, как и соответствующий код контроллера:

//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 
//});  
//} 

Я не могу получить эту работу, так что я ничего не написал для установки начальной переменной состояния. Это будет тот же формат, что и инструкция рабочей страны.

Я попытался сделать служебный код как другой метод/функцию, которая работает для предоставления разных данных местоположения. Я новичок в обеих услугах и обещаниях. Соответствующий код для углового сервиса:

(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 принимает код страны и использует его для отображения текста для названия страны.

+0

ваша функция initialCountry ничего не делает - она ​​не изменяет никаких переменных и не имеет никакого оператора возврата. –

+0

Попробуйте добавить 'track by country.code' (или' track by state.code') в 'data-ng-options' , – HankScorpio

+0

@PetrAveryanov, Да, он не устанавливает начальную переменную - вот в чем проблема. У него есть оператор возврата - посмотрите еще раз. Что делать, чтобы эти компоненты работали? –

ответ

0

ОК, теория говорит, что можно сделать что-либо в услуге, которую вы можете сделать на заводе. Но для меня услуга не стоит того, когда она возвращает {"$$ state": {"status": 1, "value": {"country": "US", "state": "NY"}} }, и 15 человек смотрят на это без рабочего ответа. Я изменил модуль на фабрику, которая возвращает простой объект JS. Код завода является:

function getUserGeolocateFactory(){ 
var location4; 
return { getCountryState: function() { 
    location4 = { "country": "US", "state": "NY"}; //TEST: object 
    return location4;  
    } 
    } 
} 

код контроллера:

cntrl.input.countrySelected = initialCountry(); 
function initialCountry(){ 
    var name4=getUserGeolocateFactory.getCountryState(); 
    return name4.country; 
}; 

Быстрый и простой. Тег select получает инициализированное значение. Готово.

Смежные вопросы