Angularjs 在下拉列表中按值选择的正确方式是什么?

Angularjs 在下拉列表中按值选择的正确方式是什么?,angularjs,Angularjs,我对Angular有点问题,从下拉列表中选择一个项目,并使Angular更新模型 我一直在StackOverflow中搜索,但运气不太好 问题是,当我在模型上手动设置值时,下拉列表会正确更新,但模型本身不会更新 $scope.setSelected = function(){ $scope.selected.id = 15; //$scope.$apply();// $apply already in progress } 从StackOverflow的各种答案中,我发现Ang

我对Angular有点问题,从下拉列表中选择一个项目,并使Angular更新模型

我一直在StackOverflow中搜索,但运气不太好

问题是,当我在模型上手动设置值时,下拉列表会正确更新,但模型本身不会更新

$scope.setSelected = function(){
    $scope.selected.id = 15;
    //$scope.$apply();// $apply already in progress
}
从StackOverflow的各种答案中,我发现Angular不知道此更新,建议的答案是运行
$scope.$apply()
$scope.$digest()
,但两者都会抛出一个
$apply已在进行中的
异常。我有一种感觉,这对我来说不是正确的方法,因为它没有意义,你必须触发一个事件来选择值

在下拉列表中按给定值选择项目的正确方法是什么?

完整的代码示例可以在


单击“选择晚餐人”按钮时,下拉列表会正确更新,但显示的模型会正确更新;单击“记录选定”时,它只显示选定的模型,但id会更新。

ng的
Select
会根据其ngModel绑定其值,该模型在示例中被错误地操作。正确的方法是更改ngModel的参考,而不是select的id:

$scope.setSelected = function () {
    $scope.selected = $scope.persons[1];  // yes
    // $scope.selected.id = 15;  // no
};

显示效果。

我不确定是否理解您的问题,但仍然

您可以在下拉列表的每个条目中包括:

...ng-click="setSelected(<value>)"...
…ng click=“setSelected()”。。。
当然,还要向函数中添加一个参数


顺便问一下,您是否知道,在fiddle示例中,您在函数setSelected中选择了ID 15?

您只是在用ID更新当前模型。但仔细查看后,名称和年龄保持不变。此外,您需要更新整个对象,如下所示:

$scope.setSelected = function(){
    $scope.selected.id = 15;
    $scope.selected.name = "Dinner-man";
    $scope.selected.age = 20;
  }

或者以任何其他方式直接更新对象。

您可以使用$filter获取整个对象,而不是每个属性

$scope.setSelected = function(){
    $scope.selected = $filter('filter')($scope.persons,15,'id')[0];
    //$scope.selected.id = 15;
    //$scope.$apply();// $apply already in progress
  }

这就是我想要的-非常感谢!我必须做一个小的调整设置{id:15},以确保Angular只查看id,但除此之外,它可以正常工作!