2

我是 Angular JS 的新手,我有一个基本的 Angular 应用程序,它只是设置了一个范围对象,设置了一些函数来初始化/创建范围对象。当我在函数中使用console.log 时,它报告的是在范围函数末尾设置的$scope 值,而不是console.log 时刻的范围对象的值。我确定这是一个基本的执行顺序问题,我将不胜感激有关此问题的任何解释或帮助。

这是角度代码:

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 这里:http: //jsfiddle.net/U6ZKr/7/

因此,您会注意到日志时实际范围对象中的 console.log 应该是所有值 false,但它们都是在 console.log 之后设置的。

在此先感谢您的帮助!

4

3 回答 3

8

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

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

于 2013-10-26T00:12:27.017 回答
1

似乎只是开发工具工作方式的一个特点。

改为尝试记录$scope.testDict.test1,您将看到所需的值。

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

于 2013-10-26T00:07:50.943 回答
0

您正在做出错误的假设,即 Chromeconsole.log会立即调试该值。它会以异步方式记录它。

你可以使用谷歌浏览器的脚本调试器来单步执行,看看这个效果。

于 2013-10-26T00:09:23.687 回答