Wiem, że podobne pytania zostały zadane, ale nie znalazłem żadnej z dobrą odpowiedzią. Chcę utworzyć listę wyboru w formie kątowej, w której wartością dla każdej opcji jest obiekt. Ponadto NIE chcę używać dwukierunkowego powiązania danych. na przykład jeśli składnik ma następujące pola:Kątowe 4 - używanie obiektów dla wartości opcji na liście wyboru
lUsers: any[] = [ { Name: 'Billy Williams', Gender: 'male' }, { Name: 'Sally Ride', Gender: 'female'} ]; curUser: any;
Chciałbym mój szablon HTML, aby zawierał to:
<select #selectElem (change)="setNewUser(selectElem.value)"> <option *ngFor="let user of lUsers" [ngValue]="user"> {{user.Name}} </option> </select>
Z tym kodem, choć moja setNewUser() funkcja odbiera zawartość Nazwa wybranego użytkownika pole. Dlaczego wybiera tę konkretną dziedzinę, nie mam pojęcia. Spodziewam się, że otrzyma "wartość" wybranej opcji, którą konkretnie ustawię na obiekt użytkownika.
Należy zauważyć, że użyłem ngValue zamiast wartości w opcji. To było przez sugestię innych na SO. Jeśli zamiast tego używam wartości, to dzieje się tak, że obiekt zostaje przekonwertowany na ciąg "[obiekt obiektu]", co jest wartością, którą otrzymuje setNewUser(), co jest bezużyteczne.
FYI, pracuję na systemie Windows 10, używając ustawienia kątowego 4.0.0 z @ kątowym/cli 1.1.2. Oto() metoda setNewUser:
setNewUser(user: User): void { console.log(user); this.curUser = user; } // setNewUser()
jestem ustalania tylko to, co dokładnie jest przekazywana do niego zarówno moja zalogowaniu ją, a tym to również na szablonie: <pre>{{curUser}}</pre>
Ani kod OP, ani twój nie dotyczą atrybutu wartości. Nie wiem, dlaczego wspomniano o tym w Twojej odpowiedzi. Co więcej, OP próbuje użyć ngValue, więc byłoby użyteczne dodać wyjaśnienie, dlaczego powinny one wiązać się z właściwością wartości (czy jest to lepsze?) Czy OP stosuje je niepoprawnie? ...) – zeroflagL