如何正确扩展FormGroup

Edu*_*léh 6 metadata typescript angular-forms angular5

我目前正在尝试扩展Angular5的FormGroup类型,以实现一个自定义方法,以接收模型状态错误并将其显示到另一个自定义组件中。

不幸的是,我收到的信息不那么丰富:
Error: ServerValidatedForm/src/platform/svalidated/group.component.ts:30:1: Error encountered in metadata generated for exported symbol 'SVFormGroup': ServerValidatedForm/src/platform/svalidated/group.component.ts:33:22: Metadata collected contains an error that will be reported at runtime: Expression form not supported.

我怀疑TypeScripting本身缺少某些东西。值得高兴的是,我已经清理了node_modules,从项目中删除了所有元数据,然后再次进行了编译,每次遇到相同的错误时,都将重新进行编译。

我正在使用:
"@angular/animations": "5.0.1", "@angular/cli": "^1.5.0", "@angular/common": "5.0.1", "@angular/compiler": "^5.0.1", "@angular/compiler-cli": "^5.0.1", "@angular/core": "5.0.1", "@angular/forms": "^5.0.1"

重要的代码在这里,任何帮助将是有帮助的:

import { Injectable } from "@angular/core"; import { FormGroup } from "@angular/forms"; import { AbstractControlOptions } from "@angular/forms/src/model";

@Injectable()
export class SVFormGroup extends FormGroup {
  constructor(
    controls: {[key: string]: any},
    validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null,
    asyncValidator?: AsyncValidatorFn|AsyncValidatorFn[]|null) {
      super(controls, validatorOrOpts, asyncValidator);  
    }

setFromModelState(response: any, form: SVFormGroup) {
if(response.error && response.error.ModelState){
  let validationErrorDictionary = response.error.ModelState;
  for (var fieldName in validationErrorDictionary) {
    if (validationErrorDictionary.hasOwnProperty(fieldName)) {
      if (form.controls[fieldName]) {
        form.controls[fieldName].setErrors(validationErrorDictionary[fieldName]);
      } else {                          
        this.setErrors(Object.assign(this.errors, validationErrorDictionary[fieldName]));
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

}}`

完整的代码可以在以下位置找到: https://github.com/eduelias/servervalidatedform

Edu*_*léh 0

最后,问题是我注册的服务错误。而不是在 App.module 而不是 App.components 上注册它 - 在提供程序内部。我一改,问题就消失了。