1

環境:

Angular1.0.5、1.1.2で試行

問題:

私の双方向バインディングはビューをすぐには更新しません。ブラウザーに反映されるようにするには、$scope.is_pic セッターの後に $scope.$apply を呼び出す必要があります。

http://jsfiddle.net/rV4LW/2/

写真をアップロードし、ファイル入力がファイル名を反映していることを確認します。上のテキスト ボックスに入力すると、ng-model で $digest が呼び出され、魔法のようにブラウザーがコントローラーにあったものに更新されます。

「if」ステートメントを次のように更新した場合:

if (e.target.result.indexOf('data:image') !== -1) {
        $scope.apc.is_pic = true;
      return $scope.$apply();
    } else {
        $scope.apc.is_pic = false;
      return $scope.$apply();
    }

突然機能することがわかります。なぜこれが失敗するのですか?

注: javascript は coffeescript によって生成されたもので、見栄えが良い理由です。

4

1 に答える 1

4

これは、モデルの更新がコールバック内で行われるためです。つまり、Angular コンテキストでは行われません。双方向バインディングは、モデル変数が Angular 内で更新された場合にのみ機能します。それ以外の場合は、$apply メソッドを明示的に呼び出す必要があります。

于 2013-03-13T07:19:50.740 に答える