DataList в Angular

У меня есть <datalist> а также <select> следующее:

Обновлено:

Пример 1:

<input type="text"  list="codes" [(ngModel)]="codeValue" (change)="saveCode(codeValue)">
<datalist id="codes">
  <option *ngFor="let c of codeList" [value]="c.code" >{{c.name}}</option>
</datalist>

<select type="text"  list="codes" [(ngModel)]="codeValue1" (change)="saveCode(codeValue)">
  <option *ngFor="let c of codeList" [value]="c.code" >{{c.name}}</option>
</select>

codeList Массив в component.ts

    codeList = [
    { code: 'abcdhe568dhjkldn', name: 'item1' },
    { code: 'ksdkcs7238t8cds', name: 'item2' },
    { code: 'kascggibebbi', name: 'item3' }
  ];

DataList показывает как имя (c.name), так и значение (c.code) в опциях и сохраняет все, что присутствует в значении, тогда как select показывает имя (c.name) и сохраняет значение (c.code).

Поведение даталиста

Поведение <dataList

Поведение избранных

Поведение <select

Пример 2:

<datalist id="codes">
<option *ngFor = "let i of [1,2,3,4]" [value]="i">{{i-1}}</option>
</datalist>

{{a}}

Я хочу показать значение i-1 в окне предложения, но связать переменную "a" с i.

Существующее решение в HTML

Из этого поста Показать метки списка данных, но представить фактическое значение. Я вижу, что мы можем использовать "data-value" для получения функциональности в HTML. Как я могу добиться такой же функциональности в Angular.

Пожалуйста помоги!

Заранее спасибо.

2 ответа

Попробуйте вот так....

html файл

<input type="text"  list="codes" [(ngModel)]="codeValue" (change)="saveCode($event)">
<datalist id="codes">
<option *ngFor="let c of codeList" [value]="c.name" >{{c.name}}</option>
</datalist>

ts файл

 codeList = [
{ code: 'abcdhe568dhjkldn', name: 'item1' },
{ code: 'ksdkcs7238t8cds', name: 'item2' },
{ code: 'kascggibebbi', name: 'item3' }
];

 public saveCode(e): void {
let name = e.target.value;
let list = this.codeList.filter(x => x.name === name)[0];
console.log(list.id);
}

Попробуйте это так.

<option *ngFor = "let i of [1,2,3,4]" (change)="a=i" [value]="i">{{i-1}}</option>

Что ж, пусть кто-нибудь исправит меня, если я не говорю правду, но вы не можете связать [value] с 'a', потому что тогда каждый элемент option имеет одинаковое значение 'a'.

Чтобы достичь того, чего вы хотите, вы должны создать массив объектов, который содержит оба поля: "a" и "i". Затем вы можете показать "i" и связать свое значение через ngModel с "a".

например

в вашем компоненте

export class AI {
    constructor(
      a: number,
      i: number
    ) {}
}


aiList: Array<AI> = [];

ai: AI = new AI(1,0);
aiList.push(ai);
ai = new AI(2,1);
aiList.push(ai);
ai = new AI(3,2);
aiList.push(ai);
ai: = new AI(4,3);
aiList.push(ai);

в вашем шаблоне

<option *ngFor = "let ai of aiList" (change)="a=ai.a" [(ngModel)]="ai.a">{{ai.i}}</option>
Другие вопросы по тегам