AngularJS中的console.log在作用域函数后执行

时间:2013-10-26 00:01:38

标签: javascript angularjs

我是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。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:8)

由于$ scope.testDict作为对console.log的引用传递,并且它是异步计算的,因此该值可能不准确。

另一种方法是使用console.log(JSON.stringify($scope.testDict));查看正确的结果。

答案 1 :(得分:1)

似乎只是开发工具工作方式的特殊性。

请尝试记录$scope.testDict.test1,然后您会看到所需的值。

我的猜测是,在您单击小三角形打开它们并查看内部之前,您记录的深层对象的内容不会被评估。在这种情况下,当你检查它时,你已经改变了内容。

答案 2 :(得分:0)

您正在错误地假设Chrome调试器console.log值立即生效。它会以异步方式记录它。

您可以使用Google Chrome的脚本调试程序介入并查看此效果。