別の (親) コンポーネントで使用する単純なカスタム ドロップダウン コンポーネントがあります。
それはすべてうまくレンダリングされます。しかし、別のオプションを選択してドロップダウンの値を変更すると、コンポーネントにバインドされている値は更新されません。
私のコンポーネントは次のようになります。
@Component({
selector: 'dropdown',
templateUrl: './dropdown.component.html',
styleUrls: ['./dropdown.component.scss']
})
export class DropdownComponent implements OnInit {
@Input()
userId: number;
ngOnInit() {
if(!this.userId) {
this.userId = 1;
}
}
}
そしてhtml:
<select [ngClass]="[sizeClass]" [(ngModel)]="userId">
<option value="1">val 1</option>
<option value="2">val 2</option>
</select>
そして、次のように親コンポーネントで使用します(app.component.html):
<dropdown [(userId)]="appUserId"></dropdown>
<br><br>
<button (click)="saveData()">Save</button>
そして app.component.ts で:
export class AppComponent implements OnInit {
appUserId: number;
ngOnInit() {
this.appUserId = 1;
}
saveData(): void {
// I expect appUserId to be changed, because I picked another value from the dropdown
alert('selected userid = ' + this.appUserId);
}
}
保存ボタンを押すと、プロパティが更新されないことが示されます。
デモアプリ
ここにデモがあります:
https://stackblitz.com/edit/angular-c3ew8a?file=src/app/dropdown/dropdown.component.html
再現するには:
- アプリケーションをロードします。
val 2
ドロップダウンから選択- ボタン
Save
を押します。
テキストを表示するアラートが表示されることを期待していますselected userid = 2
。しかし、次のように表示されますselected userid = 1
。userId
プロパティを更新しませんでした。
この作業を行うには、Angular で何をする必要がありますか?