Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Прикрутить к ui-route stateProvider.state аналоги jqueryAjax.success (https://javascript.ru/forum/angular/66429-prikrutit-k-ui-route-stateprovider-state-analogi-jqueryajax-success.html)

pro_xaoc 14.12.2016 20:41

Прикрутить к ui-route stateProvider.state аналоги jqueryAjax.success
 
Доброго времени суток.
Знатоки, пожалуйста, направьте в правильном направлении. Необходимо к stateProvider.state как-то прикрутить $http.get().success, $http.get().before, $http.get().after или$http.get().error . Как организовать?
Мой вариант:
app.config(function($stateProvider,$urlRouterProvider){
	$stateProvider
	.state('accounts_groups',{
		url: '/accounts/groups',
		
		controller: function($scope,$http){
			menuSelectAfterReload('account','groups');
			alert(2);
			$http.get('/accounts/groups/show')
				.success(function(data){
					alert(1);
				});
		}
	});

на моем коде $http.get срабатывает только при обновлении, дальше при переходе с другого урл на '/accounts/groups' - нет. Что посоветуете? Заранее спасибо:)

Alexey12345 14.12.2016 21:14

Почему бы не использовать resolve для этих целей?
https://github.com/angular-ui/ui-router/wiki#resolve

pro_xaoc 14.12.2016 21:15

В общем, хотел прикрутить ngProgress API

pro_xaoc 14.12.2016 21:50

Не получается что-то. Запускается один раз при обновлении и все на этом. Дальше при переходе по ссылке не работает. Мой код:
app.config(function($stateProvider,$urlRouterProvider){
	$stateProvider
.state('accounts_groups',{
		url: '/accounts/groups',
		resolve: {
			promiseObj: function($http){
				return $http({method: 'GET',url: '/accounts/groups/show'})
				.then(function successCallback(response){
					alert('success');
				}, function errorCallback(response){
					alert('error');
				});
			}
		},
		controller: function($scope,promiseObj){
			menuSelectAfterReload('account','groups');
			promiseObj;
		}
	});

Alexey12345 14.12.2016 22:11

Создай пример в онлайн редакторе, дело видимо не в настройках ui-router. А вообще если ngProgress API нужен только для перехода по страницам можно один раз в конфиге повесить обработчики событий на ui-router
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options){
    ngProgress.start();
})

$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
    ngProgress.complete();
})

pro_xaoc 15.12.2016 23:05

Код отрабатывает только один раз. Т.е., перезагрузились на другой странице, потом переходим по ссылке #/somelink, срабатывает ngProgress. Теперь переходим на другую ссылку и обратно на #/somelink - уже не срабатывает, т.е. не отправляется ajax-запрос. В чем может быть проблема одноразовой работы? Такое чувство, как будто где-то в кэше сидит и при повторном переходе на ту же ссылке, отдает из кэша. Но это конечно мое предположение ... какие мысли могут быть?

pro_xaoc 16.12.2016 10:15

Проблема решена! Оказалось, что я переходил по ссылкам, УРЛ менялись, а запрос отправлялся только на одной тестовой ссылке. Поэтому ngProgress срабатывал один раз.

pro_xaoc 16.12.2016 19:13

Проблема до сих пор актуальна, шаблон загружается только один раз, помогите пожалуйста. Код:
var app = angular.module('app', ['ui.router']);

app.config(function($stateProvider,$urlRouterProvider){
	$stateProvider
	.state('accounts_users',{
		url: '/accounts/users',
		templateUrl: '/index/test',
		controller: function($scope){
			menuSelectAfterReload('account','users');
		}
	})
	.state('accounts_groups',{
		url: '/accounts/groups',
		templateUrl: '/accounts/groups/show',
		controller: function($scope){
			menuSelectAfterReload('account','groups');
		}
	});
	$urlRouterProvider.otherwise('/dashboard/orders');
});

app.run(function($rootScope) {
    $rootScope.$on('$stateChangeStart', function() {
        NProgress.start();
    });

    // When route successfully changed.
    $rootScope.$on('$stateChangeSuccess', function() {
        NProgress.done();
    });

});

pro_xaoc 23.12.2016 09:00

В общем плюнул на этот костыльный ангуляр и сам написал свой роутер. Кошмар какой-то


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