为什么我有一个未定义的范围? angularjs

时间:2014-07-30 11:04:46

标签: javascript angularjs

我正试图从范围中“提取”一个值。但是我得到一个未定义的错误,因为我不明白为什么。这是来自Chrome dev

  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

1 个答案:

答案 0 :(得分:2)

你没有显示完整的代码,但它可能正在发生,因为当你运行console.log时,auth对象不存在(你可能从异步服务调用中获取它等)。它仍会出现在console.log($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

请参阅此处的完整示例(查看控制台):http://plnkr.co/edit/uqJVzfYNoJ0KCRGZawdW?p=preview

此外,你会在这里找到一些与此相关的好解释:How can I change the default behavior of console.log? (*Error console in safari, no add-on*)


所以,最重要的是:你不会能够“提取”该范围值,因为它在那时是不可用的。显示更多代码,我们将帮助您确定何时可用。