属性...在类型'{[key:string]上不存在:AbstractControl; }”

时间:2016-10-05 18:34:59

标签: angular ionic-framework ionic2

当生产在Ionic2中编译表单时(基于Angular2),我不断收到错误:

Property email does not exist on type ‘{ [key: string]: AbstractControl; }

我尝试了各种方法来创建我的表单,如:

方法1

   this.recoverPasswordForm = new FormGroup({
        email: new FormControl('me@me.com', Validators.minLength(2)),
    });

方法2

    let control = fb.control('', Validators.required);

    this.recoverPasswordForm = fb.group({
        'email': control
    });

方法3

    this.recoverPasswordForm = new FormGroup({
        email: new FormControl('me@me.com', Validators.minLength(2)),
    });

所有人都不断给出同样的错误。

ionic serve不会引发任何错误,但ionic run android会发生错误。根据在设备上运行的开发人员是一个更严格的编译器。但是我无法弄清楚正确的表单定义应该是什么。

根据Angular2 documentation这些方法,1应该是正确的。

有谁知道可能导致此编译错误的原因?

2 个答案:

答案 0 :(得分:4)

事实证明,this.recoverPasswordForm定义为:

时会导致问题

recoverPasswordForm: FormGroup

当我使用

recoverPasswordForm = null没有问题

<强>更新

发布错误报告后发现我的模板是问题:https://github.com/angular/angular/issues/12181#issuecomment-252471832

我在模板中使用recoverPasswordForm.controls.email代替recoverPasswordForm.get('email')

答案 1 :(得分:0)

直到Ionic在以后的版本中修复此问题,这里有一个解决方法来禁用我发现暂时工作的prod模式(针对移动版本的严格编译)。

main.prod.ts内容替换为main.dev.ts中的内容,如下所示:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

编辑:我发现使用构建目标可以获得良好的调试信息:ionic run android --device,应该再次吐出正确的警告/错误。在我的情况下,我认为它所抱怨的访问者在我的.ts中,但它们实际上在我的html中并使用.访问者,而不是[]