Javascript 为什么我有一个未定义的范围?安格拉斯

Javascript 为什么我有一个未定义的范围?安格拉斯,javascript,angularjs,Javascript,Angularjs,我试图从范围中“提取”一个值。然而,我得到了一个没有定义的错误,因为我不明白为什么。这是Chrome开发的 console.log($scope.auth) console.log($scope) 第一个打印“未定义”,第二个打印如下。我希望$scope.auth打印对象 auth: Object Owner: "agent2" Role: "coldCalling" 这有什么原因吗 $$childScopeClass {$$childTail: null, $$childHead:

我试图从范围中“提取”一个值。然而,我得到了一个没有定义的错误,因为我不明白为什么。这是Chrome开发的

  console.log($scope.auth)
  console.log($scope)
第一个打印“未定义”,第二个打印如下。我希望$scope.auth打印对象

auth: Object
Owner: "agent2"
Role: "coldCalling"
这有什么原因吗

$$childScopeClass {$$childTail: null, $$childHead: null, $$nextSibling: null, $$watchers: null, $$listeners: Object…}
$$childHead: null
$$childScopeClass: null
$$childTail: null
$$listenerCount: Object
$$listeners: Object
$$nextSibling: null
$$prevSibling: null
$$watchers: null
$id: "002"
$parent: Scope
auth: Object
   Owner: "agent2"
   Role: "coldCalling"
__proto__: Object
this: $$childScopeClass
__proto__: Scope

您没有显示完整的代码,但这可能是因为运行console.log时auth对象不存在(您可能是从异步服务调用等获取它)。它仍然会出现在
console.log($scope)
调用中,因为当您展开变量时,console会显示变量的当前状态。因此,当您在控制台中展开
$scope
变量时,它的
auth
对象已被定义和设置

下面是一个超时的示例(用于模拟任何异步事件):

请参见此处的完整示例(检查控制台):

此外,您还可以在此处找到与此相关的一些很好的解释:



因此,底线是:将无法“提取”该范围值,因为它在该点不可用。显示更多代码,我们将帮助您确定它何时可用。

运行console.log时,auth对象可能不存在。它仍然会出现在第二次调用中,因为console.log排序在您展开变量时会显示变量的当前状态。试着给它一个超时,看看会发生什么。这很奇怪,因为一切似乎都正常。你能给我们更多的代码吗?如果auth是由服务添加到作用域中的,则应该在.then或.success块中按原样更新它asynchronous@ex0ns我很确定会发生这样的情况:您添加了一个超时,因此在调用console.log时没有设置“Auth”,您可以使用在您的案例中加载Auth的控制器吗?超时只是一个伪替换(或模拟,如果您愿意,但这不是重点)对于任何异步调用…请查看控制台中发生的情况,auth存在于完整的$scope对象中,而未在$scope.auth日志中定义。这是控制台的性质。在我的第一条注释中解释了这一点。
setTimeout(function(){
  $scope.auth = {'Owner': 'Test', 'Role': 'Role'};
}, 1000);
console.log($scope.auth);   // undefined
console.log($scope);        // auth object exists when you expand it in the console