Angular 2 - EXCEPTION:_this.subscribe不是函数 - 自定义验证

Cha*_*kin 8 angular2-forms angular

我正在尝试实现自定义验证规则来验证是否选中了复选框.

但是我收到了一个错误

error_handler.js:46 EXCEPTION: _this.subscribe is not a function
Run Code Online (Sandbox Code Playgroud)

当我尝试添加自定义验证器时

validator.ts

 import {Control} from "angular/common";

 interface ValidationResult {
     [key: string]: any;
 }

 export class CustomValidators {

     static validateChecked(c: Control): ValidationResult {
         return (c.value);
     }
 }
Run Code Online (Sandbox Code Playgroud)

Component.ts

import {Component} from '@angular/core';

import {FormBuilder, FormGroup, Validators, FormControl} from '@angular/forms';
import {CustomValidators} from './validators.ts'

@Component({
    selector: 'wizard',
    templateUrl: './template.html',
})

/**
 * @todo - check how first select is automatically active
 * @todo - export form presets to form class
 */
export class Wizard {
    myForm: FormGroup;

    privacy: boolean;


    // Prefilling the FormBuilder
    constructor(private horizonService: HorizonService, fb: FormBuilder) {
        this.myForm = fb.group({
            'privacy': ['', Validators.required, CustomValidators.validateChecked],
        });
    }

    onSubmit(values: string): void {
        console.log('you submitted value: ', values);
    }
}
Run Code Online (Sandbox Code Playgroud)

Led*_*dzz 7

Validators.compose如果您需要多个验证器,则应该使用.所以你的代码应该是这样的:

constructor(private horizonService: HorizonService, fb: FormBuilder) {
    this.myForm = fb.group({
      'privacy': ['', Validators.compose([Validators.required, CustomValidators.validateChecked])],
    });
  }
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读一篇关于验证器的好文章.


P. *_*ney 3

我认为,如果您对 FormGroup 构造函数进行一些更改,通过传入 anew FormControl()并将验证器添加到数组中,它可能会很好地工作。

就像是:

export class Wizard {
    myForm: FormGroup;

    constructor(private horizonService: HorizonService) {
        this.myForm = new FormGroup({
            privacy: new FormControl('', [
                Validators.required,
                CustomValidators.validateChecked
            ])
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我建议阅读这篇关于ANGULAR 2 中的 CUSTOM VALIDATORS 的文章。

问候。