Я использую Angular 1.6
У меня есть text input
, который подключен к datalist
.
Опции datalist
заполняются через ng-repeat
. value
является «идентификатором», но отображается «имя».
text input
подключен к ng-model
.
Проблема в том, что когда я выбираю опцию из списка данных, она переопределяет «имя» на «id». Так как это значение.
Мне нужно сохранить значение, но отобразить и иметь возможность редактировать имя.
Это пример кода:
angular.module('myApp',[]).controller('myCtrl', function() {
const vm=this;
vm.people=[{id:1,name:"Bob"},{id:2,name:"Jane"},{id:3,name:"Don"},
{id:4,name:"Eric"},{id:5,name:"Sally"}];
});
<code><div ng-app="myApp" ng-controller="myCtrl as vm">
<pre>{{vm.myName|json}}
Одним из решений является то, что я мог бы подключить ng-change
к input
и затем в controller
запустить функцию фильтра, которая будет выглядеть следующим образом:
// in JS (excerpt)
vm.updateMyName = name => {
vm.myName = vm.people.filter(n => n.name === name)[0].id
};
<!-- in html (excerpt) -->
<input type="text" name="name" list="names" ng-model="vm.throwAwayValue"
ng-change="vm.updateMyName(vm.throwAwayValue)" />
<datalist id="names">
<option ng-repeat="person in vm.people">
{{:: person.name}}
</option>
</datalist>
Тем не менее, я облажался, если есть повторяющиеся имена, так как это будет соответствовать идентификатору этого имени (я не буду вдаваться в это, в любом случае было бы неудобно иметь выпадающий список с дубликатом). опции). И это также похоже на ненужный шаблон.
Есть еще идеи?