Angular的ControlValueAccessor的初始值为“null”?

时间:2018-04-02 16:34:18

标签: javascript angular nativescript angular2-nativescript

我使用的是Nativescript + Angular

| nativescript     │ 3.4.3           │ 3.4.3          │ Up to date  │
│ tns-core-modules │ 3.4.1           │ 3.4.1          │ Up to date  │
│ tns-android      │ 3.4.2           │ 3.4.2          │ Up to date  │

我使用的代码使用ngModel界面创建自定义ControlValueAccessor值。
如您所见,我有2个TextFields和一个显示模型值的json。

enter image description here

这是我使用值激活组件的方式:

home.component.ts

export class HomeComponent  {

 dataModel = {
    a:1,b:2
};

...
}

home.component.html

<StackLayout >
    <app-flag  [(ngModel)]="dataModel"></app-flag>
</StackLayout>

- 这是实际的组件标记代码:

flag.component.html

<GridLayout rows="auto,auto,auto"   columns="*" >
        <TextField [(ngModel)]="innerValue.a" row="0" ></TextField>
        <TextField [(ngModel)]="innerValue.b" row="1"></TextField>
        <Label textWrap="true" text="{{innerValue | json}}" row=3></Label>
</GridLayout>

flag.component.ts

export class FlagComponent implements  ControlValueAccessor {

    innerValue= { a: 1, b: 2 }

    writeValue(value: any) {
        this.innerValue = value;
    }
...}

此代码工作正常,并在json中显示值。但问题是在t = 0时,出现错误:

  

ERROR TypeError:无法读取属性&#39; a&#39;为null

在测试之后 - 似乎首先 - writeValue中的值为空。

问题

有些东西不对。即使writeValue值出现延迟 - 它仍然具有带初始值的公共属性:

enter image description here

那怎么来null

Playground

BTW - 在原生角度下它不会发生 - 相同的代码:

https://plnkr.co/edit/TyoCgvb8i8zSryxC9NXb?p=preview

0 个答案:

没有答案