我是Angular JS的新手,我有一个基本的Angular App,只需设置一个范围对象,设置一些函数来初始化/创建范围对象。当我在我的函数中使用console.log时,它会报告在scope函数末尾设置的$ scope值,而不是console.log时的scope对象的值。我确信这是一个基本的执行顺序问题,我将不胜感激这个问题的任何解释或帮助。
这是角度代码:
var module = angular.module('my-app', []);
function MainController($scope)
{
$scope.testDict = {};
$scope.createNewTestDict = function(){
$scope.testDict.test1 = {1: false, 2: false, 3: false}
}
$scope.initializeDict = function(){
$scope.createNewTestDict();
console.log($scope.testDict);
$scope.testDict.test1 = {1: true, 2: true, 3: true}
}
$scope.initializeDict();
}
JSFiddle Here:http://jsfiddle.net/U6ZKr/7/
因此,您会注意到日志时实际范围对象中的console.log应该都是false,但它们都是在console.log之后设置的全部true。
提前感谢您的帮助!
答案 0 :(得分:8)
由于$ scope.testDict作为对console.log的引用传递,并且它是异步计算的,因此该值可能不准确。
另一种方法是使用console.log(JSON.stringify($scope.testDict));
查看正确的结果。
答案 1 :(得分:1)
似乎只是开发工具工作方式的特殊性。
请尝试记录$scope.testDict.test1
,然后您会看到所需的值。
我的猜测是,在您单击小三角形打开它们并查看内部之前,您记录的深层对象的内容不会被评估。在这种情况下,当你检查它时,你已经改变了内容。
答案 2 :(得分:0)
您正在错误地假设Chrome调试器console.log
值立即生效。它会以异步方式记录它。
您可以使用Google Chrome的脚本调试程序介入并查看此效果。