ngModelChangeとEventEmitterを使用して、選択ボックスコンポーネントの値で特定のタスクを実行します。しかし、emit()を実行するとすぐに、選択ボックスのテキストが消えます。エミッタを取り除くとすぐに、選択ボックスが完全に動作します。完全なコードはここにあります。Angular2では、イベントエミッタを使用しているときに、選択ボックスのテキストが消えます。
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { ContributorApi } from '../../../services/ContributorApi';
import { Contributor } from '../../../models/model.Contributor';
@Component({
selector: 'module-builder-instructor-box',
template: `
<div class="inline-form-control-wrapper required-input-field margin-bottom-15">
<select [ngModel]="selectedItem" (ngModelChange)="onChange($event)" class="form-control medium-length gradient-bg font-medium">
<option disabled> Select Instructor</option>
<option *ngFor="let contributor of contributors"
[ngValue]="contributor"
>{{contributor.first_name}} {{contributor.last_name}}</option>
</select>
</div>
`
})
export default class ModuleBuilderInstructorSelect implements OnInit {
@Input() instructorIndex: number;
@Output() setInstructor = new EventEmitter<any>();
contributors: Contributor[];
selectedItem: Contributor;
constructor(private contributorApi: ContributorApi) {
}
ngOnInit() {
this.contributorApi.getContributors().subscribe(
res => {
this.contributors = res;
},
error => {
console.log(error);
}
);
}
onChange(value: Contributor) {
this.selectedItem = value;
this.setInstructor.emit({index: this.instructorIndex, id: this.selectedItem.id});
console.log(this.selectedItem);
}
}
選択時にオプションを変更するとコンソールログを表示できますか?私は確かではありませんが、ngModelChangeの$ event_はコントリビュータオブジェクトではありません –
$ eventはどのタイプのオブジェクトでもかまいません。この場合、それはコントリビュータオブジェクトでした。問題を見つけた方法あなたの助けをありがとう –