ngOptions 跟踪问题

Issue on ngOptions track by

我使用 ngOptions 创建的 AngularJs option/selector 有一些问题。我遇到的问题是它不会触发我在 ngChange 中使用的方法。我发现那是因为在 actionListname 属性 不是唯一的。所以如果我改变它们是独一无二的,它将按预期工作。但是我希望它们像现在这样命名。

所以我想我可以试试 ng-options="action.name for action in ctrl.actionList track by action.value"。但它不起作用。谁能帮帮我?

HTML

<select id="someOptions" class="dropdown dropdown-md"
    ng-model="ctrl.settingAction"
    ng-change="ctrl.onChangeAction()"
    ng-options="action.name for action in ctrl.actionList">
</select>

数据结构

actionList = [{
    name: "Running Man"
    value: "RUN"
}, {
    name: "Running Man"
    value: "JUMP"
}]

JS

public onChangeAction(): void {
    console.log(this.settingAction);
}

您似乎在使用 'controller as' 语法。你能确认 onChangeAction() 函数是这样设置在 vm/self 中的吗?

var vm = this;
vm.onChangeAction = function (): void {
    console.log(this.settingAction);
}

演示

angular.module('myApp',[]).controller('myCtrl', function($scope){
 var ctrl = this;
 this.actionList =[{
    "name": "Running Man",
    "value": "RUN"
}, {
    "name": "Running Man",
    "value": "JUMP"
}];

this.onChangeAction = function(){
 alert(this.settingAction.value);
}
 
          
 });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl as ctrl">
 <select id="someOptions" class="dropdown dropdown-md"
    ng-model="ctrl.settingAction"
    ng-change="ctrl.onChangeAction()"
    ng-options="action.name for action in ctrl.actionList">
</select>
</div>