我使用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
不会更改。如果没有初始化值(上面的控制器行被删除),existingClient
的值将保持未定义。
当值更改时,将附加ng-change
,但模型本身不会更新为新值。
我正在使用 AngularJS v1.2.0-rc.3 。
答案 0 :(得分:123)
我认为您可能正在使用子范围并且不知道它。 ng-if
,ng-repeat
,ng-switch
和ng-include
都会创建子范围。范围上的值是继承的,但是如果更改子范围中的值,它会在子范围上设置一个值,并在父项上保持继承的值不变。尝试使用对象来保存您的值并查看是否修复了它。由于您只是在对象上设置属性而不是直接在作用域上设置值,因此它将使用父作用域的继承对象并更新该值。
$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 extension来帮助调试示波器。
答案 1 :(得分:1)
这也是将参数保存到$ scope对象的解决方案:
控制器:
$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>