当生产在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应该是正确的。
有谁知道可能导致此编译错误的原因?
答案 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中并使用.
访问者,而不是[]
。