$ resource и $ q для установки значения инициализации раскрывающегося списка

У меня есть служба данных, в которой говорится:

myApp.factory('locationsData', function ($resource) {


return $resource('/api/Location/:id', { id: '@id' }, { update: { method: 'PUT' } });});

Затем я использую эти местоположения для заполнения раскрывающегося списка в моем представлении:

<select ng-model="locationId" ng-options="item.LocationId as item.LocationName for item  in locations"></select>

Я хочу установить значение инициализации раскрывающегося списка в моем контроллере с помощью:

$scope.locationId = 8;

Это не работает, я думаю, из-за асинхронного характера $ resource - у него еще нет списка, поэтому я не могу его установить.

Я знаю, что $ q предназначен для решения этой проблемы, но не уверен, как создать обещание и установить

$scope.locationId = 8;

после того, как это выполнено

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

Спасибо.


person user2375056    schedule 23.06.2013    source источник


Ответы (1)


Я верю, что где-то в контроллере вы будете делать

$scope.locations=locationsData.query();

Метод запроса или получения может принимать аргументы для функций успеха и ошибки. Что-то вроде

locationsData.query(function(data){
});

Итак, вы должны установить

$scope.locationId = 8;

внутри функции успеха запроса.

person Chandermani    schedule 23.06.2013
comment
Так мне не нужен $ q? Кажется, это работает. За исключением случаев, когда свойство ng-model находится на объекте, например. $scope.location.locationId, когда я пытаюсь получить к нему доступ в контроллере, например $scope.location.locationId = 8; не идет. Я могу исправить это, выполнив $scope.location = []; в контроллере, но затем, когда я отправляю свою форму, объект местоположения пуст. Я, наверное, здесь что-то глупое делаю. - person user2375056; 23.06.2013
comment
Вы этого не сделаете. Также $ scope.location.locationId будет работать, пока ваша привязка в шаблоне html равна ng-model = location.locationId. - person Chandermani; 24.06.2013