pLavrenov
@pLavrenov
Разработка сайтов

Почему не выводится значение $routeParams в AngularJs?

Не понимаю почему не выводится переменная route1 в контролере duo.
в выводе пишет undefined хотя в контролере one переменную выводит. а сам объект выводится и там и там (переменные route2)

<!doctype html>
<html lang="ru" ng-app="app">
	<head>
		<base href="http://localhost:8080/">
		<script src="js/angular.min.js"></script>
		<script src="js/angular-route.min.js"></script>
		
		<script>
		
		var app = angular.module('app', ['ngRoute']);
			
		app.config(function($routeProvider, $locationProvider) {
			$routeProvider
			.when('/:text', {
				template:'<div>Controler one - 1 {{route1}} </br> Controler one - 2 {{route2}} </br> Controler one - 3 {{route3.text}}</div>',
				controller: 'one'
			});
			
			$locationProvider.html5Mode(true);
		});

		app.controller('one', ['$scope', '$routeParams', function($scope, $routeParams) {
			$scope.route1 = $routeParams.text;
			$scope.route2 = $routeParams;
			$scope.route3 = $routeParams;
		}]);

		app.controller('due', ['$scope', '$routeParams', function($scope, $routeParams) {
			$scope.route1 = $routeParams.text;
			$scope.route2 = $routeParams;
			$scope.route3 = $routeParams;
		}]);
		
		
		</script>
		
		
	</head>
	<body>

		
		<div class="content_in" ng-view></div>
		
		<div ng-controller="due">
			<b>Controler due - 1 {{route1}}</b> </br>
			Controler due - 2 {{route2}}  </br>
			Controler due - 3 {{route3.text}}  </br>
		</div>
		
	</body>
</html>
  • Вопрос задан
  • 339 просмотров
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Потому что контроллер one инстанцируется после того, как роутер отработал. Поэтому при инстанцировании в $routeParams уже есть параметр из маршрута.
Контроллер due инстанцируется перед тем, как роутер отработал, поэтому на момент инстанцирования в $routeParams пусто и route1 у вас выходит undefined. route2 и route3 отображаются потому что $routeParams является ссылкой на один и тот же объект в течение всего цикла жизни приложения, вы его опубликовали в скоуп, при изменении маршрута роутер в этот объект публикует параметры, они отображаются через two-way data binding.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы