Angular2 ngModel внутри ngFor
Я пытаюсь связать массив строк из моих входных данных, поэтому в html-файле я написал следующее:
<div *ngFor="let word of words; let in=index" class="col-sm-3">
<div class="form-group">
<input type="text" [(ngModel)]="words[in]" class="form-control" [attr.placeholder]="items[in]" required>
</div>
</div>
но это не сработало, как ожидалось, потому что когда я регистрирую переменную слов, она показывает пустой массив, инициализированный в моем классе компонентов. Кроме того, я регистрирую переменную из другого компонента, если это должно быть проблемой для моей проблемы. У меня есть два компонента:
- компонент формы, содержащий массив компонентов запроса.
- в запрос дочернего компонента, имеющего массив строк слов.
Итак, переменная слов объявляется в компоненте запросов, но я регистрирую эту переменную через компонент формы следующим образом:
console.log(JSON.stringify(this.queries));
While queries-это массив запросов в компоненте формы:
queries:Query[] = [];
Спасибо за вашу помощь!
3 ответов
проблема заключается в использовании массива примитивных значений (words
) в ngFor
.
вы можете изменить слова в массив объектов типа
words = [{value: 'word1'}, {value: 'word2'}, {value: 'word3'}];
и использовать его как
<div *ngFor="let word of words; let in=index" class="col-sm-3">
<div class="form-group">
<input type="text" [(ngModel)]="words[in].value" class="form-control" [attr.placeholder]="items[in]" required>
</div>
</div>
Это также может быть разрешимо с помощью trackBy
но я не уверен.
каждый входной тег должен иметь уникальный атрибут "name", как описано в:
Angular2 ngModel внутри ngFor (данные не привязываются к входу)
вот исправленный код:
<div *ngFor="let word of words; let in=index" class="col-sm-3">
<div class="form-group">
<input type="text" [(ngModel)]="words[in]" name="word{{in}}" class="form-control" [attr.placeholder]="items[in]" required>
</div>
решил это, используя функцию @Input () и передав массив запросов + номер индекса запроса. Спасибо ребята за поддержку.