Angularjs 无法使用选定值更新角度选择

Angularjs 无法使用选定值更新角度选择,angularjs,Angularjs,我使用selects允许用户在事件和年份之间切换。每次更改都会从服务器中提取适当的数据,返回并更新页面。但是,选择框从选定值变为空值。我已经研究了许多解决方案,但它们都不起作用 <select ng-model="eventName" ng-options="item.value for item in eventOptions track by item.value" ng-change="changeEvent(eventName.value)"> </s

我使用selects允许用户在事件和年份之间切换。每次更改都会从服务器中提取适当的数据,返回并更新页面。但是,选择框从选定值变为空值。我已经研究了许多解决方案,但它们都不起作用

<select
   ng-model="eventName"
   ng-options="item.value for item in eventOptions track by item.value"
   ng-change="changeEvent(eventName.value)">
</select>
$scope.eventName或$scope.eventYear值将在更改时正确更新,但对页面没有影响。选择仅为空的选定值

已用更正的代码更新 我想把我所做的更改发布得比评论允许的更清楚

我从选项中删除了对象参数值,从函数调用eventName.value中删除了参数

<select
    ng-model="eventName"
    ng-options="item for item in eventOptions track by item"
    ng-change="changeEvent()">
</select>

一切正常!感谢所有人,尤其是Delta让我正确地看待它。

因此,您的事件名称变量设置为item。不是item.value,请尝试传入ChangeEventName,而不是传入ChangeEventName.value。无论哪种方式,传递到方法中的值都与模型变量的值不匹配

item.value for item in eventOptions track by item.value
因此,对于这个语句,您的意思是make my options ng model=item,但make the value=item.value,这样它们可以显示您希望它们显示的内容,但仍然可以从每个选项中获得您需要的所有信息

经进一步检查,您似乎不需要:

 $scope.eventName = eventName; 
 $scope.updateSelected(); 
Angular应该为您更新eventName,您只需要调用change方法。

我不确定您是否需要:

ng-change="changeEvent(eventName.value)"
如果使用ng选项,则选择时将自动更新范围中的模型。如果您想在控制器发生变化时执行其他操作,则可以在控制器中查看该值:

$scope.$watch('eventName', function() {
   //do stuff
});

这个解决方案应该可以工作,但也有优点和缺点,即使javascript中的eventName发生了更改,这个观察者也会启动,这可能是好的,也可能是坏的,这取决于具体情况。OP的方法只有在用户更改选择时才会触发。@Delta,true。我只是想告诉你,当用户更改选择时,angular select会为你更新作用域中的模型,而不需要跟踪。@Delta,实际上在第二次查看时,如果控制器中的值更新了,它会在绑定到模型时更新select。所以,这是同样的事情。这让我走上了正确的道路。我不得不对代码进行一些修改,直到我纠正了新的方法。我一直在为每个选项返回一个命名数组[label:'label Name',value:label Name'],并使用item.value构建选项。我将其简化为一个简单的值数组,并且不再需要为这些字段指定对象参数。这使我可以简单地使用$scope.eventName或$scope.eventYear。我的更改事件函数现在是$scope.changevent=函数{$scope.getData$scope.eventName,$scope.eventYear;};
ng-change="changeEvent(eventName.value)"
$scope.$watch('eventName', function() {
   //do stuff
});