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 回答