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 в Angular

Поведение select

DataList в Angular

Пример 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

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

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

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

Обновлено: Неважно, сначала я не понял вопроса

Dino 23.03.2018 20:51

Привет @Dino, я обновил вопрос другим примером для четкого описания проблемы.

Sai Raman Kilambi 24.03.2018 04:23
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
5
2
12 857
3

Ответы 3

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

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

Привет, @DiabolicWords, я прикрепил скриншот проблемы. Проблема в том, что при отображении я получаю и значение, и имя. В моем случае я просто хочу отобразить имя (i-1), а не фактическое значение (i). Значение должно быть привязано к переменной 'a', тогда как имя должно отображаться в поле предложения.

Sai Raman Kilambi 23.03.2018 19:32

Что ж, пусть кто-нибудь поправит меня, если я не говорю правду, но вы не можете привязать [значение] к '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>

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

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.info(list.id);
}

Другие вопросы по теме