我正试图从范围中“提取”一个值。但是我得到一个未定义的错误,因为我不明白为什么。这是来自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
答案 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*)
所以,最重要的是:你不会能够“提取”该范围值,因为它在那时是不可用的。显示更多代码,我们将帮助您确定何时可用。