Angular.js - 通过$ route或$ routeParams访问params

时间:2013-08-21 21:47:03

标签: angularjs angular-routing

我有一个控制器,我在其中注入$ 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);

            }]);

2 个答案:

答案 0 :(得分:15)

请参阅http://deansofer.com/posts/view/14/AngularJs-Tips-and-Tricks-UPDATED#routinghttps://groups.google.com/d/msg/angular/ib2wHQozeNE/sC3SX3QTyRgJ

在您的代码中,$ route和$ routeParams可能是异步解析的。当您在控制台中展开对象时,它们已被解析,但在控制器构造函数运行时它们无法解析。

在控制器中使用$scope.$on('$routeChangeSuccess', function(...) { ... }),并尝试检查那里的路线属性。

$routeChangeSuccess

答案 1 :(得分:3)

使用Chrome控制台进行一些调整

我只想补充一点,这个奇怪的行为与控制台值得关注:它在扩展时更新对象。说我们有:

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