-3

編集 (2013 年 7 月 18 日): あなたの提案に従って、コードを少し変更しまし。この例は、$watch がどのように機能するかを確認するための簡単なテストです。変数を設定し、その変数に $watch を定義してから、監視対象の変数を 2 回更新しています。$watch は 1 回しか呼び出されないようですが、3 回呼び出されると予想されます (最初の呼び出しを含めて、最初の呼び出しをオプションにする方法も考えています)。

$scope.name = 'World'; //initial assignment
$scope.count = 0;
$scope.$watch('name', function(){
    $scope.count++;
});

$scope.name = 'Bob';//should increment the value to 2
$scope.name = 'Jane';//should increment the value to 3

このコードの実行後に $scope.count が 1 になるのはなぜですか?


元のリクエスト: このhttp://plnkr.co/edit/Pcwaci5oQ0ANIslPlPmdplunkerでは、カウント変数、名前変数を設定し、内でonを定義しています。$watch$scopecontroller

count の値が最終的に 1 に解決されることを期待していますが、初期化から変更されていません。

4

2 に答える 2

4

++変数の後は、右側の値に1を追加することを意味します(割り当て後)...興味深いことに、これは私が期待するとおりには機能しませんが、割り当て(左側のもの)をドロップしてインクリメントするだけです動作します (++ は実際には $scope.count=$scope.count+1 に似ているため)。これは、angular 以外の「通常の」javascript にも当てはまります。

var y=5;
y=y++;
console.log(y); //5

どうやら、右側の値を保存し、右側をインクリメントしてから、保存された値を左側に割り当てる必要があります。

$scope.count=0;
$scope.count++; //this results in 1

でも

$scope.count=0;
$scope.count=$scope.count++; //this results in 0

または、事前にインクリメントすることもできます

$scope.count=0;
$scope.count=++$scope.count; //this results in 1
于 2013-07-17T19:17:03.347 に答える