自定义组件的Angular 5数据绑定未检测到引用更改

时间:2018-07-16 07:38:42

标签: angular data-binding

在我的父组件中,我像这样从子组件绑定对象属性:

<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)进行了更改。但是,如果我使用一个对象并尝试从该对象绑定属性,则此方法无效。

0 个答案:

没有答案