0

モーダルを処理するために ui-bootstrap を使用しています。スコープ パラメーターとして $scope を渡しています。次のようになります。

var modalInstance = $modal.open({
    templateUrl: 'views/pages/gethelp/modals/bulk_change.html',
    controller: BulkChangeCtrl,
    size: 'lg',
    scope: $scope,
    backdrop:"static",
    resolve: {
      type: function() { return type; },
      field:function() { return field; },
      preset: function() { return preset; }
    }
  });

モーダル コントローラー内で、入力にバインドするだけでなく、ユーザーが送信を押したときに選択した値として使用する単一のモデル文字列値を定義しています。これは簡単で、次のようにセットアップされます。

$scope.val = "";

それでも、ボタンのクリックで呼び出される送信関数では、何があっても $scope.val は空です。関数が完全に異なるバージョンの $scope.val を参照しているようです。それでも、私の見解では、{{val}} に問題なくバインドできます。

どうしてこれなの?コードを次のように更新すると:

$scope.obj = { val:"" };

すべて期待どおりに動作し、{{obj.val}} にバインドできます。ここで完全に欠けているものは何ですか?

4

1 に答える 1

3

これは、bootstrap がvar modalScope = (modalOptions.scope || $rootScope).$new();スコープ引数で指定されたスコープの子スコープ (@) を作成するためです。したがって、Angular の子スコープでは、原型は親から継承されます。また、プリミティブ型 (.バインディングにない場合) はプロトタイプ チェーンで参照されず、新しいプロパティを追加してval更新しますが、基になるスコープには反映されません。参照型の更新のみが (オブジェクト、関数参照など)変更が反映されてobj.valいるため、親スコープにも同じ参照があるため機能しobjます。

だからあなたがするとき: -

 $scope.val = "";

提供されたスコープから作成された新しい子スコープはval、参照型の値として更新されないため、子で更新されます。親で更新されることはありません。

ここでよく読んでください

于 2014-08-12T18:20:30.497 に答える