在以下代码中,为什么$ 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')
}
答案 0 :(得分:1)
在角度范围中处理原始值时,不能从子范围覆盖父范围中的值。这是因为angular使用了javascript原型继承。
在这种情况下,您可以做的是在父作用域中创建一个对象,然后您可以更新子作用域中的值。因为您没有覆盖对象(只有附加到它的属性),所以引用有效。
“经验法则是,如果你使用ng-model,必须在某个地方有一个点。” MiškoHevery