我有一个父组件,它使用 . 将一些数据 ( selectedId
) 传递给子组件@Input()
。
父模板
<child-component [selectedId]="selectedId"></child-component>
子组件使用selectedId
如下:
子模板
<select [(ngModel)]="selectedId">
<option [value]="option.id" *ngFor="let option of options">{{option.name}}</option>
</select>
子组件
export class HelloComponent {
@Input()
set selectedId(id: any) {
this._selectedId = id;
}
get selectedId() {
return this._selectedId;
}
public _selectedId;
options = [
{
"id": "1",
"name": "Weekly"
},
{
"id": "2",
"name": "Bi-Weekly"
},
{
"id": "3",
"name": "Lunar"
},
{
"id": "4",
"name": "Monthly"
}
]
}
这完美地工作。问题是当我直接从子组件更改所选项目时 - 不使用父组件。
当它不能按预期工作时,这是以下情况:
- 从
selectedId
父组件(API 调用)填充 - 使用手动更改选择选项(从
child-component
) - API 再次被调用,它应该设置与步骤 1 中设置的 ID 相同的 ID。但是这不会触发更改事件。我的假设是父组件不知道在子组件中进行的手动更改,因此它仍然包含对
selectedId
步骤 1 的引用,并且不会触发步骤 3 中的更改,因为它是相同的 ID。
我知道我可以使用Output()
和共享服务来解决这个问题,但是有没有其他方法可以通知家长有关更改检测的信息?