2016-09-26 3 views
6

Я пытаюсь реализовать собственное правило проверки, чтобы проверить, установлен ли флажок.Угловая 2 - ИСКЛЮЧЕНИЕ: _this.subscribe не является функцией - Пользовательская проверка

Но я получаю error_handler.js:46 EXCEPTION: _this.subscribe is not a function, когда я пытаюсь добавить валидатора

validator.ts

 

    import { Control } from "angular/common"; 

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

    export class CustomValidators { 

     static validateChecked(c: Control): ValidationResult { 
     return (c.value); 
     } 
    } 

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); 
     } 
    } 

+0

ли вы найти решение? – John

ответ

3

Я думаю, что если вы меняете вокруг ваш конструктор FormGroup бит, передав в new FormControl() и добавив Validators в массив, он вполне может работать.

Что-то как:

export class Wizard { 
    myForm: FormGroup; 

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

я рекомендую для чтения через этот пост на CUSTOM VALIDATORS IN ANGULAR 2.

С уважением.

7

Вы должны использовать Validators.compose, если вам нужно несколько валидаторов. Так что ваш код должен быть такой:

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

Вы можете прочитать большую статью о валидаторах here.

2

Проблема только в том, что в ее проверке отсутствует [].

Правильная форма:

'privacy': ['', [Validators.compose([Validators.required, CustomValidators.validateChecked])]], 
Смежные вопросы