angular(v4)入門,試圖創建一個簡單包含下拉列表的可重用組件。但無法將其選定值傳遞給通過@Output()
使用它的組件。請參閱plunker例如hereAngular 4 Output()with dropdown
從本質上講,這是可重用的組件:
import { Component, Output, EventEmitter, NgModule } from '@angular/core';
@Component({
selector: 'app-group-selector',
template: `
<div>
<label>Group</label>
<select [ngModel]="selectedgroup" (ngModelChange)="onGroupChanged($event)">
<option *ngFor="let groupName of groupNames" [ngValue]="groupName">{{groupName}}</option>
</select>
</div>`
})
export class SharedComponent {
@Output() selectedgroup: EventEmitter<string> = new EventEmitter<string>();
groupNames: string[];
constructor() {
this.groupNames = ['A', 'B', 'C'];
this.selectedgroup = 'A';
}
onGroupChanged(newvalue): void {
console.log(newvalue);
this.selectedgroup.emit(newvalue);
}
}
這裏是我想用它在另一個組件(應用程序組件):
import {Component, NgModule, VERSION} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {SharedComponent} from 'src/shared.component';
import { FormsModule} from '@angular/forms';
@Component({
selector: 'my-app',
template: `
<div>
<h2>Test</h2>
<app-group-selector (selectedgroup)='onSelectedGroupChanged($event)'></app-group-selector>
</div>
`,
})
export class App {
name:string;
selectedGroup:string;
constructor() {
//this.name = ""//`Angular! v${VERSION.full}`
}
onSelectedGroupChanged(newgroup):void {
this.selectedGroup = newgroup;
console.log(newgroup);
}
}
@NgModule({
imports: [ BrowserModule, FormsModule ],
declarations: [ App, SharedComponent ],
bootstrap: [ App ]
})
export class AppModule {}
問題顯然與<app-group-selector (selectedgroup)='onSelectedGroupChanged($event)'></app-group-selector>
我得到的運動員的錯誤是instance[output.propName].subscribe is not a function
。在我的機器我得到一個不同的錯誤(可能是由於沒有使用最新版本的角度,雖然我仍在使用V4的):ERROR TypeError: this.selectedgroup.emit is not a function
謝謝。在相關問題上,如何在選擇改變事件之前觸發來自消費組件(例如,此處的app組件)的共享模塊(例如,初始化的選定組)中的'ngModel'被觸發?例如,我需要根據初始選擇在消費組件中執行一些操作。 – stt106
一個選擇是在你的'SharedComponent'中使用'ngOnInit',然後你可以直接在那裏調用'onGroupChanged(...)'或'emit'。如果還不清楚,可以搜索一下或者提出一個新問題。 –
這正是我所做的,例如在共享組件的'ngInit'中調用'emit'。但是如何在消費組件中接收它?我覺得我是如此接近它... – stt106