在我的父组件中,我像这样从子组件绑定对象属性:
<app-chid-comp [date]="resultObj.date"></app-child-comp>
这是仅观察某些服务并将结果复制到bound属性的组件文件。我简化了它,resultObj
只是一个带有日期属性(字符串)的对象。
@Component({
selector: 'app-parent-comp',
templateUrl: 'parent.component.html',
styleUrls: ['./parent.style.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ParentComponent implements OnInit {
public resultObj;
constructor(private changeDetector: ChangeDetectorRef
private myService) {}
ngOnInit() {
this.changeValue();
}
changeValue() {
myService
.get()
.subscribe(result => {
if (result) {
this.resultObject = JSON.parse(JSON.stringify(result));
this.changeDetector.markForCheck();
}
});
}
}
想象一下,主要部分changeValue在一段时间后再次被调用。 这是子组件:
@Component({
selector: 'app-child-comp',
templateUrl: 'child.component.html',
styleUrls: ['./child.style.scss']
})
export class ChildComponent {
public mydate: any;
constructor() {}
@Input()
set date(date: any) {
this.mydate = date;
}
get date() {
return this.mydate;
}
}
这是我的问题:为什么如果用angular渲染组件却设置了“ date”初始值,却又再也没有设置?
我以为我可以使用JSON.parse(JSON.stringify(value))
更改参考
并确保通过this.changeDetector.markForCheck()
触发它?
然后,我尝试将字符串属性从父组件绑定到子组件,并在一段时间后再次对其进行更改。结果是我从未在子组件中得到任何更改。然后,我使用Object.assign({}, value)
进行了更改。但是,如果我使用一个对象并尝试从该对象绑定属性,则此方法无效。