2

私はAngular JSを初めて使用し、スコープオブジェクトをセットアップするだけの基本的なAngularアプリを持っており、スコープオブジェクトを初期化/作成するためのいくつかの関数をセットアップしています。関数内で console.log を使用すると、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 ここ: http://jsfiddle.net/U6ZKr/7/

したがって、ログの時点での実際のスコープ オブジェクトの console.log はすべての値が false であるはずですが、console.log の後に設定された値はすべて true になっています。

よろしくお願いします。

4

3 に答える 3

1

開発ツールの動作方法に特有のもののようです。

代わりにログを記録してみてください$scope.testDict.test1。必要な値が表示されます。

私の推測では、ログに記録したディープ オブジェクトの内容は、小さな三角形をクリックして開いて内部を確認するまで評価されません。この場合、それを調べた時点で、すでに内容が変更されています。

于 2013-10-26T00:07:50.943 に答える
0

console.logChromeデバッガーがすぐに値を取得するという誤った仮定をしています。ログに記録しますが、非同期です。

Google Chrome のスクリプト デバッガーを使用して介入し、この効果を確認できます。

于 2013-10-26T00:09:23.687 に答える