我有一个简单的自定义下拉组件,我在另一个(父)组件中使用它。
这一切都很好。但是,每当我通过选择另一个选项来更改下拉列表的值时,绑定到组件的值就永远不会更新。
我的组件如下所示:
@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 中做什么才能完成这项工作?