2017-02-04 1 views
2

У меня есть требование, когда я показываю серию текстовых полей с начальными пустыми данными. Поэтому для того же я создал один массив с 3 пустым [{},{},{}]. Тогда я сделал петлю над каждым элементом и отображается на просмотр с помощью *ngFor* ngFor с `{}` пустые объекты ссылаются на одиночную ссылку, когда коллекция определена на шаблоне

<div *ngFor="let item of [{},{},{}]"> 
    {{item.Id}} 
    <input type="text" [(ngModel)]="item.Id"> 
</div> 

Над делают мои все текстовые поля правильно, но когда я пытаюсь изменить любой из входного элемента, все текстовые поля относится к той же ссылке.

Я хочу изменить конкретный объект item объект Id объект. Я знаю, что могу перемещать объявление массива внутри моего класса компонентов (хотя это решает мою проблему), мне любопытно узнать, что случилось с объявлением массива в шаблоне?

Problem Plunker

+1

Это чувствует, как XY проблема для меня. Вы уже упоминали, что можете решить это, переместив массив в свой класс, и на самом деле вам нужно будет делать это * в любом случае *, чтобы сделать что-либо * полезным * с этими полями ввода, поэтому неясно, почему вы пытаются решить это вообще. – Claies

+0

@Claies Я знаю, что это можно решить другим способом, я должен удалить этот вопрос тогда ..? Его смущает меня, почему он работает с другим способом, поэтому я подумал, что лучше задать вопрос ... –

+1

Возможно, он все еще может открыть некоторую интересную информацию о внутренней работе Angular или даже об ошибке. –

ответ

-1

Вы не заявили о item.id собственности.

Следующий код будет работать:

<div *ngFor="let item of [{id: ''},{id: ''},{id: ''}]"> 
    {{item.id}} 
    <input type="text" [(ngModel)]="item.id"> 
</div> 
+0

Это не имеет смысла, если Я переношу одно и то же объявление объекта items на компонент, который он действительно работает, проверьте plunker [здесь] (http://plnkr.co/edit/cwTEeb1yejPDjTWOdd?p=preview). Там нам не нужно иметь 'id' prop для определения элемента' items'. Угловое будет создавать его для нас как когда вы добавите значение в поле 'input'. –

1

экземпляры объектов, созданных в шаблоне с использованием идентичных объекта буквального синтаксиса являются повторно AFAIK, поэтому 3x один и тот же объект.

<div *ngFor="let item of [{},{},{}]"> 
<div *ngFor="let item of items"> 

с

items:[{},{},{}]; 

должен работать, потому что в ТС будет создано 3 новых объектов.

Plunker example

+0

любая ссылка на код, где я могу проверить тот же ? –

+0

Также почему '[{Id: ''}, {Id: ''}, {Id: ''}]' он хорошо работает на шаблоне? В соответствии с вашим ответом, мои предложения также не должны были работать –

+0

Это интересно. Если я передам его обработчику событий, они также не считаются равными. Http://plnkr.co/edit/b7ZAZBIt7T8oyocyTMa5?p=preview –

Смежные вопросы