调用API后Angular组件不更新

时间:2019-02-22 15:14:26

标签: angular data-binding angular-changedetection

我有一个下拉列表,其中有一个模型作为[输入]。

关于我的父母:

    public ngOnInit(): void {

        this.initializeDropdown();       
    }

private initializeDropdown(): void {

    this.viewModel.dropdownItems = {
        defaultItem: {
            display: 
            value: undefined
        },
        items: []
    };

    const promise = this.someService.get("SOMEURL");

    promise.then(res => {
        if (Array.isArray(res)) {

            res.map((item) => {

                this.viewModel.dropdownItems.items.push(
                    {
                        display: item.display,
                        value: item.value
                    });
                }
            );
        }
    });
}

问题是不会更新子组件。因此,下拉列表不会更新。我可以看到viewModel已初始化。

我用一种方法[this.viewModel.dropdownItems]绑定了它

我也在其他地方使用此下拉组件,因此我知道它可以工作。 (关于api调用的Dunno虽然不知道我是否还要在其他地方这样做)

1 个答案:

答案 0 :(得分:1)

如果您使用的是changeDetection: ChangeDetectionStrategy.OnPush,请保留ChangeDetectorRef并按以下方式致电markForCheck

 constructor(private changeDetectorRef: ChangeDetectorRef) {}

 const promise = this.someService.get("SOMEURL");
    promise.then(res => {
        if (Array.isArray(res)) {

            res.map((item) => {

                this.viewModel.dropdownItems.items.push(
                    {
                        display: item.display,
                        value: item.value
                    });
                });
            this.changeDetectorRef.markForCheck();
        }
    });