Angular.js — получение доступа к параметрам через $route или $routeParams

У меня есть контроллер, в который я ввожу $route и $routeParams, но когда я получаю значение через

$route.routes.current.params.test -> текущий не определен $routeParams.test -> тест не определен

Оба объекта заполняются правильно, когда я использую console.log($route) или console.log($routeParams)

Я сбит с толку. Как может быть значение для console.log, но оно не работает внутри того же контроллера, из которого я делаю console.log?

Обновление: пример кода

    angular.module('TestApp')
        .controller('TestController', ['$scope', '$http', '$routeParams', '$route',
            function($scope, $http, $routeParams, $route) {
                console.log($routeParams);
                //console.log($routeParams.test);
                console.log($route.current.test);
                //console.log($route.routes);

            }]);

person BuddyJoe    schedule 21.08.2013    source источник
comment
Не могли бы вы опубликовать часть своего кода?   -  person Tim B James    schedule 22.08.2013
comment
current является собственностью $route. Не из $route.routes.   -  person JB Nizet    schedule 22.08.2013
comment
$route.current возвращается неопределенным   -  person BuddyJoe    schedule 22.08.2013
comment
вы должны показать свою конфигурацию маршрута, это ключ к тому, какие свойства будут доступны в $ routeParams.   -  person shaunhusain    schedule 22.08.2013


Ответы (2)


См. http://deansofer.com/posts/view/14/AngularJs-Tips-and-Tricks-UPDATED#routing и https://groups.google.com/d/msg/angular/ib2wHQozeNE/sC3SX3QTyRgJ

В вашем коде $route и $routeParams, скорее всего, разрешаются асинхронно. К тому времени, когда вы разворачиваете объекты в консоли, они уже разрешены, но не разрешены при запуске функции конструктора контроллера.

Используйте $scope.$on('$routeChangeSuccess', function(...) { ... }) в своем контроллере и попробуйте изучить там свойства маршрута.

$routeChangeSuccess

person Mark Rajcok    schedule 22.08.2013
comment
Большое спасибо. Я настоящий угловой новичок, и это было очень полезно. - person Snicolas; 07.02.2014
comment
Спасибо, это свело меня с ума на день. - person Andy Brudtkuhl; 30.04.2014

Небольшая настройка с Chrome Console

Я просто хочу добавить, что на это странное поведение с консолью стоит обратить внимание: она обновляет объект, когда вы его расширяете. Скажем, у нас есть:

obj = {}
obj.a = {x: 1} //give it something worth displaying the expand triangle for
console.log(obj)
obj.b = 1
console.log(obj)

В консоли мы получим:

▶ Object {a: Object}
▶ Object {a: Object, b: 1}

Что правильно отображает разницу между этими двумя копиями obj. Однако, когда вы расширяете их, они ничем не отличаются:

▼ Object {a: Object}
  ▶ a: Object
    b: 1
  ▶ __proto__: Object

▼ Object {a: Object, b: 1}
  ▶ a: Object
    b: 1
  ▶ __proto__: Object

С $route

Но, по крайней мере, мы могли бы сказать из консоли, что что-то обновляется асинхронно, если консоль с одной строкой отличается от ее расширения, например, когда $route только с двумя парами ключ/значение:

▶ Object {routes: Object, reload: function}

Раскладывается на три:

▶ Object {routes: Object, reload: function}
  ▶ current: angular.extend.angular.extend
  ▶ reload: function () {}
  ▶ routes: Object
  ▶ __proto__: Object
person Lucia    schedule 04.09.2014