2015-02-28 2 views
1

Я пытаюсь выяснить, как правильно установить свойства в области $ my контроллера, когда эти свойства должны быть получены из некоторой службы. Обычно я назначаю области видимости переменных следующим образом:

$scope.firstName = 'John'; 
$scope.lastName = 'Doe'; 

Так как же я выполнить ту же самую операцию, когда я хочу, чтобы получить значение свойства из некоторого метода обслуживания?

Вот мой завод метод обслуживания:

var getUserDetails = function() { 
    return $q.when($resource('/api/v1/common/userdetails').get()); 
}; 

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

$scope.userDetails = commonService.getUserDetails(); 

Однако, это не работает. Я в конечном итоге, сделать что-то вроде этого, который чувствует себя очень неестественно:

commonService.getUserDetails().then(function (user) { 
    $scope.user = user; 
}); 

Не говоря уже выше будет возвращать обещание, а не только чистые данные пользователя, результат хотелось бы. Мне кажется, что я не использую обещания, услуги или не назначаю значения области из служб в моем контроллере соответственно.

Может кто-нибудь, пожалуйста, сообщите мне, если это правильно, и если нет, пожалуйста, покажите правильный способ сделать это?

+3

Это то, как обещают работать, если вы используете маршрутизатор, который вы не можете использовать, в зависимости от вашей ситуации/usecase ... Все зависит от того, как должно работать приложение/страница – Jens

+0

https: //docs.angularjs .org/руководство/миграция # шаблоны-нет-больше-автоматически-UnWrap-обещания –

ответ

1

Вопреки ответам $ resource все еще делает то, что вы ожидаете от него - хотя автоматическая разворачиваемость была удалена из обещаний, она по-прежнему работает с $resource. Проблема в том, что вы явно заключили его в обычное обещание $ q, когда вы набрали на нем $q.when. Вместо этого, сделайте следующее:

var getUserDetails = function() { 
    return $resource('/api/v1/common/userdetails').get(); // no $q.when 
}; 

И вы получите поведение вы ожидаете:

$scope.userDetails = commonService.getUserDetails(); // will work. 

Хотя лично - мне нравится явное обозначение, что не скрывает тот факт, запрос HTTP делается лучше.

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