Хобрук: Ваш путь к мастерству в программировании

установить начальное значение angularjs, выбираемого из службы

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


  • ваша функция initialCountry ничего не делает - она ​​не изменяет никаких переменных и не имеет никакого оператора возврата 10.03.2015
  • Попробуйте добавить track by country.code (или track by state.code) к data-ng-options. 10.03.2015
  • @PetrAveryanov, Да, он не устанавливает начальную переменную - вот в чем проблема. У него есть оператор возврата - посмотрите еще раз. Что нужно сделать, чтобы эти компоненты заработали? 10.03.2015
  • @HankScorpio Я поставил отслеживание перед существующим оператором, т. Е. Отслеживание по коду страны как . . . и это сломало выбор. Ничего не появляется. Спасибо, хотя для чего-то нового, чтобы попробовать. 10.03.2015
  • Майк, возврат находится во внутренней функции, поэтому твоя функция ничего не возвращает. 10.03.2015
  • Я изменил оператор контроллера на cntrl.input.countrySelected = getUserGelocateService.getUserLocation[country]; Он запускает службу, и я вижу журналы. В консоли ошибок нет. Поле выбора появляется, но оно пустое — ничего не установлено. При нажатии работает. Небольшой прогресс, но не работает. Петр, спасибо за ваш комментарий. Это привело к полной перезаписи. Все еще нет сигары для меня. 10.03.2015
  • Служба angular что-то возвращает. Когда я помещаю console.log непосредственно перед getUserGelocateService.getUserLocation(country); Я вижу следующий журнал: {$$state:{status:1,value:{country:US,state:NY}}} Что это значит? Как мне вытащить США и Нью-Йорк из этого беспорядка? Или нужно что-то менять в сервисной функции? 11.03.2015
  • Моя последняя версия функции контроллера: cntrl.input.countrySelected = function initialCountry(getUserGelocateService){return getUserLocation[country];} Она не содержит ошибок консоли и не устанавливает начальное значение для countrySelected. Я пробовал много вещей и ударил стену. 11.03.2015

Ответы:


1

Хорошо, теория говорит, что в сервисе можно сделать все, что можно сделать на фабрике. Но для меня служба не стоит проблем, когда она возвращает {"$$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 получает инициализированное значение. Сделанный.

12.03.2015
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..