Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   UI-Router передача ajax-переменной в контроллер (https://javascript.ru/forum/angular/50646-ui-router-peredacha-ajax-peremennojj-v-kontroller.html)

pik.os 05.10.2014 23:52

UI-Router передача ajax-переменной в контроллер
 
Есть код:
mainApp.config(function($stateProvider, $urlRouterProvider, $locationProvider ) {
	$urlRouterProvider.otherwise("/err404");
	$stateProvider
		.state('start', {
			url: "/",
			templateUrl: "views/c/search.html",
			controller: 'search'
		})
 . . .
 . . . 

function search($scope,$http){

	$http({method: 'JSONP', url: "http://my_site.com:3000"}).
        success(function(data) {
			$scope.c = data;
        })
}

Если $scope.c присвоить константу вне функции $http, то всё прекрасно работает. Как мне заставить контроллер ждать ответа $http?

pr0r0k131 08.10.2014 10:03

Когда у тебя открывается url: "/", и в стейте прописан контроллер, то контроллер никого ждать не будет.

Но как вариант, попробуй вместо "success" использовать "then". Тогда $http провайдер точно будет ждать.

$http({method: 'JSONP', url: "http://my_site.com:3000"})
    .then(function(data) {
        $scope.c = data;
    },function(err){
        // обработка ошибки
    })

a.malitsky 09.10.2014 23:59

Есть свойство resolve у статуса:
Цитата:

An optional map of dependencies which should be injected into the controller. If any of these dependencies are promises, the router will wait for them all to be resolved or one to be rejected before the controller is instantiated.

MetaDriver 16.10.2014 09:17

Цитата:

Сообщение от pik.os (Сообщение 333652)
Есть код:
.........
Если $scope.c присвоить константу вне функции $http, то всё прекрасно работает. Как мне заставить контроллер ждать ответа $http?

Код вполне рабочий, я бы добавил только одну маленькую детальку:
....
function search($scope,$http){

        $scope.c = null;  // добавочка
       
	$http({method: 'JSONP', url: "http://my_site.com:3000"}).
        success(function(data) {
			$scope.c = data;
        })
}

Это нужно, чтобы до получение ответа сервера, значение $scope.c не было 'undefined'. После прихода ответа, полученное значение присвоится $scope.c автоматически (в этом суть сервиса q).


Часовой пояс GMT +3, время: 17:52.