我有一个控制器,我在其中注入$ 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);
}]);
答案 0 :(得分:15)
请参阅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(...) { ... })
,并尝试检查那里的路线属性。
答案 1 :(得分:3)
我只想补充一点,这个奇怪的行为与控制台值得关注:它在扩展时更新对象。说我们有:
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