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-ifng-repeatng-switchng-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>