Я знаю, что схожие вопросы были заданы, но я не нашел ни одного хорошего ответа. Я хочу создать список выбора в угловой форме, где значение для каждой опции является объектом. Кроме того, я НЕ хочу использовать двухстороннюю привязку данных. например, если мой компонент имеет следующие поля:
lUsers: any[] = [ { Name: 'Billy Williams', Gender: 'male' }, { Name: 'Sally Ride', Gender: 'female'} ]; curUser: any;
Я бы хотел, чтобы мой HTML-шаблон содержал следующее:
<select #selectElem (change)="setNewUser(selectElem.value)"> <option *ngFor="let user of lUsers" [ngValue]="user"> {{user.Name}} </option> </select>
Однако с помощью этого кода моя функция setNewUser() получает содержимое выбранного поля имени пользователя. Почему он выбирает эту конкретную область, я понятия не имею. Я ожидаю, что он получит "значение" выбранного параметра, который я специально установил для пользовательского объекта.
Обратите внимание, что я использовал ngValue вместо значения в опции. Это было по предложению других на SO. Если я использую значение вместо этого, то происходит то, что объект преобразуется в строку "[Объект объекта]", что и получает setNewUser(), что бесполезно.
FYI, я работаю над Windows 10, используя угловой 4.0.0 с @angular/cli 1.1.2. Вот метод setNewUser():
setNewUser(user: User): void { console.log(user); this.curUser = user; } // setNewUser()
Я определяю, что именно передается ему как в моем протоколе, так и в том числе в шаблоне: <pre>{{curUser}}</pre>