Angular 2 (TypeScript)를 사용하고 있습니다.
나는 새로운 선택으로 무언가를하고 싶지만, 내가 얻는 onChange()
것은 항상 마지막 선택입니다. 새로운 선택을 어떻게받을 수 있습니까?
<select [(ngModel)]="selectedDevice" (change)="onChange($event)">
<option *ngFor="#i of devices">{{i}}</option>
</select>
onChange($event) {
console.log(this.selectedDevice);
// I want to do something here with the new selectedDevice, but what I
// get here is always the last selection, not the one I just selected.
}
답변
양방향 데이터 바인딩이 필요하지 않은 경우 :
<select (change)="onChange($event.target.value)">
<option *ngFor="let i of devices">{{i}}</option>
</select>
onChange(deviceValue) {
console.log(deviceValue);
}
양방향 데이터 바인딩의 경우 이벤트 및 특성 바인딩을 분리하십시오.
<select [ngModel]="selectedDevice" (ngModelChange)="onChange($event)" name="sel2">
<option [value]="i" *ngFor="let i of devices">{{i}}</option>
</select>
export class AppComponent {
devices = 'one two three'.split(' ');
selectedDevice = 'two';
onChange(newValue) {
console.log(newValue);
this.selectedDevice = newValue;
// ... do other stuff here ...
}
devices
객체 배열 인 경우 ngValue
대신에 바인딩하십시오 value
.
<select [ngModel]="selectedDeviceObj" (ngModelChange)="onChangeObj($event)" name="sel3">
<option [ngValue]="i" *ngFor="let i of deviceObjects">{{i.name}}</option>
</select>
{{selectedDeviceObj | json}}
export class AppComponent {
deviceObjects = [{name: 1}, {name: 2}, {name: 3}];
selectedDeviceObj = this.deviceObjects[1];
onChangeObj(newObj) {
console.log(newObj);
this.selectedDeviceObj = newObj;
// ... do other stuff here ...
}
}
Plunker-사용하지 않음 <form>
Plunker– <form>
새 양식 API를 사용 하고 사용합니다.
답변
select 태그에 참조 변수를 작성하고 값을 #device
변경 핸들러에 전달 onChange($event, device.value)
하여 새 값을 가져 와서 컴포넌트로 값을 다시 전달할 수 있습니다.
<select [(ng-model)]="selectedDevice" #device (change)="onChange($event, device.value)">
<option *ng-for="#i of devices">{{i}}</option>
</select>
onChange($event, deviceValue) {
console.log(deviceValue);
}
답변
[value] 대신 [ngValue]를 사용하십시오 !!
export class Organisation {
description: string;
id: string;
name: string;
}
export class ScheduleComponent implements OnInit {
selectedOrg: Organisation;
orgs: Organisation[] = [];
constructor(private organisationService: OrganisationService) {}
get selectedOrgMod() {
return this.selectedOrg;
}
set selectedOrgMod(value) {
this.selectedOrg = value;
}
}
<div class="form-group">
<label for="organisation">Organisation
<select id="organisation" class="form-control" [(ngModel)]="selectedOrgMod" required>
<option *ngFor="let org of orgs" [ngValue]="org">{{org.name}}</option>
</select>
</label>
</div>
답변
https://angular.io/docs/ts/latest/guide/forms.html 에서 Angular 2 양식 자습서 (TypeScript 버전)를 수행하는 동안이 문제가 발생했습니다.
선택 / 옵션 블록에서 옵션 중 하나를 선택하여 선택 값을 변경할 수 없습니다.
Mark Rajcok이 제안한 작업을 수행했지만 원래 자습서에서 놓친 것이 있는지 또는 업데이트가 있는지 궁금합니다. 어쨌든 추가
onChange(newVal) {
this.model.power = newVal;
}
HeroFormComponent 클래스의 hero-form.component.ts에
과
(change)="onChange($event.target.value)"
<select>
요소의 hero-form.component.html에 작동하게했습니다.
답변
각도 6 이상에서 selectionChange를 사용하십시오. 예
(selectionChange)= onChange($event.value)
답변
또 다른 옵션은 객체를 값으로 문자열로 저장하는 것입니다.
<select [ngModel]="selectedDevice | json" (ngModelChange)="onChange($event)">
<option [value]="i | json" *ngFor="let i of devices">{{i}}</option>
</select>
구성 요소:
onChange(val) {
this.selectedDevice = JSON.parse(val);
}
이것은 페이지로드시 선택 값을 설정하기 위해 양방향 바인딩 작업을 수행 할 수있는 유일한 방법이었습니다. 선택 상자를 채우는 내 목록이 내 선택이 바인딩 된 것과 정확히 동일한 개체가 아니기 때문에 동일한 속성 값이 아니라 동일한 개체 여야하기 때문입니다.
답변
<mat-form-field>
<mat-select placeholder="Vacancies" [(ngModel)]="vacanciesSpinnerSelectedItem.code" (ngModelChange)="spinnerClick1($event)"
[ngModelOptions]="{standalone: true}" required>
<mat-option *ngFor="let spinnerValue of vacanciesSpinnerValues" [value]="spinnerValue?.code">{{spinnerValue.description}}</mat-option>
</mat-select>
각도 재질 드롭 다운에 이것을 사용했습니다. 잘 작동합니다