0

次のコードで、新しい領域が切り替えられたときに $scope.text がリセットされるのはなぜですか? トップレベルのスコープで定義されているため、その値は永続化する必要があると思います。

 <div ng-controller="Ctrl">
  <select ng-model="selection" ng-options="item for item in items">
  </select>
  <hr/>
  <div ng-switch on="selection" >
    <div ng-switch-when="settings" ng-controller="Ctrl1">
        Enter val :
        <input ng-model="text" />{{text}}
      </div>
    <span ng-switch-when="home" ng-controller="Ctrl2">Home Span</span>
    <span ng-switch-default>default</span>
  </div>
</div>

コントローラー:

var myApp = angular.module('myApp',[]);

function Ctrl($scope) {
  $scope.items = ['settings', 'home', 'other'];
  $scope.selection = $scope.items[0];
  $scope.text = "Enter val";
}

function Ctrl1($scope) {
  console.log('hi')
}

function Ctrl2($scope) {
  console.log('hi2')
}

http://jsfiddle.net/KDWh8/

4

1 に答える 1

1

角度スコープでプリミティブ値を操作している場合、親スコープの値を子スコープから上書きすることはできません。これは、angular が JavaScript プロトタイプ継承を使用するためです。

この場合にできることは、親スコープでオブジェクトを作成し、子スコープでその値を更新することです。オブジェクトを上書きしていないため (オブジェクトに関連付けられているプロパティのみ)、参照が機能します。

「経験則として、ng-model を使用する場合、どこかにドットが必要です。」ミシュコ・ヘヴェリー

于 2013-07-08T09:47:51.230 に答える