7

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

            }]);
4

2 回答 2

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

于 2013-08-22T00:24:44.127 回答
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
于 2014-09-04T07:57:14.563 回答