2
        function infoboxController($scope) 
{

    $scope.current_view_ =  myGlobalInstance.current_view_;


    $scope.$watch($scope.current_view_, 
            function(newValue, oldValue)
            {       
                console.log(newValue);
                console.log(oldValue);

                console.log($scope.current_view_);

                if($scope.current_view_!=null)
                    $scope.dataset = $scope.current_view_.dataset;  
            }
        );

}   

コンソール出力

undefined infobox.js:10
undefined infobox.js:11
null 

myGlobalInstance は、私が作成した JS クラスのインスタンスです。その current_view_ は最初は null ですが、インスタンスの作成後に値に設定されます

4

3 に答える 3

1

$watch が発火すると、oldValue と newValue は、1 つの例外を除いて常に異なります: ウォッチャーが初期化されるときです。したがって、関数が初めて実行されるときは true: になりますoldValue===newValue。AngularJSのドキュメントから:

ウォッチャーがスコープに登録された後、リスナー fn が ($evalAsync を介して) 非同期的に呼び出され、ウォッチャーが初期化されます。まれに、watchExpression の結果が変化しなかったときにリスナーが呼び出されるため、これは望ましくありません。リスナー fn 内でこのシナリオを検出するには、newVal と oldVal を比較します。これら 2 つの値が同一 (===) の場合、リスナーは初期化のために呼び出されました。

于 2016-03-30T13:26:22.757 に答える