为什么这种状态会被重置?

时间:2013-07-08 09:38:54

标签: angularjs

在以下代码中,为什么$ 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/

1 个答案:

答案 0 :(得分:1)

在角度范围中处理原始值时,不能从子范围覆盖父范围中的值。这是因为angular使用了javascript原型继承。

在这种情况下,您可以做的是在父作用域中创建一个对象,然后您可以更新子作用域中的值。因为您没有覆盖对象(只有附加到它的属性),所以引用有效。

  

“经验法则是,如果你使用ng-model,必须在某个地方有一个点。” MiškoHevery