父子通信未按预期工作



我有两个组件,一个父组件和一个子组件。 每次我单击父组件中的某个按钮时,都会填充一个对象并通过@Input装饰器发送到子组件。

这里的问题是,即使在子组件中检测到对对象的更改,我尝试填充的数据也只会在单击时显示。

这是我的代码当前的样子:

parent.component.ts

private toSend = {};
public sendToChild() {
var objectToSend = {
headerMessage:`Title`, 
bodyMessage:"Body"
};
this.toSend = { ...objectToSend };
$('#childComponent').appendTo("body").modal('toggle');
}

父组件.html

<child-component #childComponent [data]="toSend">
</child-component>

child.component.ts

public headerMessage: string = "";
public bodyMessage: string = "";
@Input('data')
set data(data: any) {
if (data !== undefined && data.length !== 0) {
this.setData(data);
}
}
private setData(el): void {
for (let key in el) {
switch (key) {
case "headerMessage":
this.headerMessage = el[key];
break;
case "bodyMessage":
this.bodyMessage = el[key];
break;
}
}
}

子组件.html

<div class="modal" tabindex="-1" role="dialog" id="childComponent">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header" style="padding: 1rem;">
<h5 class="modal-title">{{headerMessage}}</h5>
<button type="button" class="close" id="btn-close-id" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="modal-body-id">
<div class="container-fluid">
<div class="col-12">
{{bodyMessage}}
</div>
</div>
</div>
<div class="modal-footer" style="padding: 1rem;">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>

我也尝试了ngOnChanges,我每次都能打印我发送的对象,但我遇到了同样的问题。

您可以使用ChangeDetectorRef强制检测

import { ..., ChangeDetectorRef } from '@angular/core';

将其添加到构造函数中

constructor(private _cdr: ChangeDetectorRef) {...}

在您的子组件中

this._cdr.markForCheck();
// or if not working
this._cdr.detectChanges()

另一件事,JQuery没有被Angular推荐。如果要在项目中使用模态,则应选中"角度材质模态"或制作自己的模态组件。

最新更新