Select 选项没有随着 ng-model 的变化而更新
Select option is not getting updated with change in ng-model
我有两个 select 标签(比如 Select 1 和 Select 2),它们分别带有 ng-model 变量并在 ng-change 触发器上调用不同的方法。我正在尝试通过 "Select 2" ng-change 调用的方法设置 "Select 1" 选项值。我发现此设置存在问题。
如果用户 select 从 "Select 2" 下拉列表中选择一个值,"Select 1" 选项的值将正确更新。但是,如果用户 select 从 "Select 1" 获取值,然后当他尝试更改 "Select 2" 下拉列表的值时,"Select 1" 值不是 responding/changing。
请帮助我理解此行为并指导我克服此问题。
我创建了一个 plnkr 来捕捉这种行为。请检查
https://plnkr.co/edit/tGN4ZxdHprnpx7aD7Pen?p=preview
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, $rootScope) {
$scope.a = 'b';
$scope.features = ['a', 'b', 'c'];
$scope.roles = ['a', 'c', 'b'];
$scope.b = function() {
alert("feature changing");
};
$scope.call = function(a){
console.log("call called : " + a);
$rootScope.selectedFeature = '';
$rootScope.selectedFeature = a;
}
$rootScope.selectedFeature = 'a';
});
我已经在此处复制了 app.js 代码
ng-model 以某种方式解析到本地范围而不是 rootScope。我通过在 HTML 中将其作为 rootScope 变量来解决这个问题。我已经更新了 plunkr https://plnkr.co/edit/tGN4ZxdHprnpx7aD7Pen?p=preview
<body ng-controller="MainCtrl">
<div ng-if="selectedFeature">
<span>Select 1: </span>
<select ng-model="$root.selectedFeature" ng-options="feature for feature in features" ng-change="b()">
</select>
</div>
<!--<input type="text" ng-model="a" ng-change="call(a)">-->
<span>Select 2: </span>
<select ng-model="$root.selectedRole" ng-options="role for role in roles" ng-change="call($root.selectedRole)">
</select>
</body>
我有两个 select 标签(比如 Select 1 和 Select 2),它们分别带有 ng-model 变量并在 ng-change 触发器上调用不同的方法。我正在尝试通过 "Select 2" ng-change 调用的方法设置 "Select 1" 选项值。我发现此设置存在问题。 如果用户 select 从 "Select 2" 下拉列表中选择一个值,"Select 1" 选项的值将正确更新。但是,如果用户 select 从 "Select 1" 获取值,然后当他尝试更改 "Select 2" 下拉列表的值时,"Select 1" 值不是 responding/changing。
请帮助我理解此行为并指导我克服此问题。
我创建了一个 plnkr 来捕捉这种行为。请检查 https://plnkr.co/edit/tGN4ZxdHprnpx7aD7Pen?p=preview
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, $rootScope) {
$scope.a = 'b';
$scope.features = ['a', 'b', 'c'];
$scope.roles = ['a', 'c', 'b'];
$scope.b = function() {
alert("feature changing");
};
$scope.call = function(a){
console.log("call called : " + a);
$rootScope.selectedFeature = '';
$rootScope.selectedFeature = a;
}
$rootScope.selectedFeature = 'a';
});
我已经在此处复制了 app.js 代码
ng-model 以某种方式解析到本地范围而不是 rootScope。我通过在 HTML 中将其作为 rootScope 变量来解决这个问题。我已经更新了 plunkr https://plnkr.co/edit/tGN4ZxdHprnpx7aD7Pen?p=preview
<body ng-controller="MainCtrl">
<div ng-if="selectedFeature">
<span>Select 1: </span>
<select ng-model="$root.selectedFeature" ng-options="feature for feature in features" ng-change="b()">
</select>
</div>
<!--<input type="text" ng-model="a" ng-change="call(a)">-->
<span>Select 2: </span>
<select ng-model="$root.selectedRole" ng-options="role for role in roles" ng-change="call($root.selectedRole)">
</select>
</body>