AngularJS:select不是双向绑定到模型
我正在使用select来显示客户端名称。 用户应该能够select一个现有的客户端,然后更新范围属性:
调节器
初始化“首选”。
if($scope.clients.length > 0) $scope.existingClient = $scope.clients[0];
视图
<select id='nm-existing-client-name' class='form-control input-lg' ng-model='existingClient' ng-options="client.name for client in clients"> </select>
范围属性existingClient
在select菜单更改时不会更改。 如果未初始化值(上面的控制器行被删除),则existingClient
的值将保持不确定状态。
附加一个ng-change
会在一个值发生ng-change
时触发,但是模型本身不会更新到新的值。
我正在使用AngularJS v1.2.0-rc.3 。
我想你可能正在使用一个孩子的范围,不知道它。 ng-if
, ng-repeat
, ng-switch
和ng-include
都创build子作用域。 您的作用域上的值是inheritance的,但是如果您更改子作用域中的值,它将在子作用域上设置一个值,并将inheritance的值保留在父对象上。 尝试使用对象来保存你的值,看看是否修复它。 由于您只是在对象上设置属性而不是直接在该范围上设置值,因此将使用父范围的inheritance对象并更新值。
$scope.data = { existingClient: $scope.clients.length > 0 ? $scope.clients[0] : undefined };
视图:
<select ng-model="data.existingClient" ng-options="client.name for client in clients"></select>
您可以在Chrome中使用AngularJS Batarang扩展来帮助debugging您的范围。
这也是将参数保存到$ scope对象的解决scheme:
控制器:
$scope.scope = $scope; $scope.clients = []; $scope.existingClient = $scope.clients.length > 0 ? $scope.clients[0] : undefined;
视图:
<select ng-model="scope.existingClient" ng-options="client.name for client in clients"></select>