2016-10-14 16 views
5

Tôi đã viết một rất đơn giản validator điều khiển biểu mẫu:Angular2 cách chuyển một tham số vào trình xác thực kiểm soát biểu mẫu tùy chỉnh?

import { Directive } from '@angular/core'; 
import { AbstractControl, NG_VALIDATORS } from '@angular/forms'; 

function checkboxRequiredValidator(c: AbstractControl) { 
    return c.value ? null : { 
     required: true 
    }; 
} 



@Directive({ 
    selector: '[checkbox-required-validator]', 
    providers: [ 
     { provide: NG_VALIDATORS, multi: true, useValue: checkboxRequiredValidator } 
    ] 
}) 
export class CheckboxRequiredValidator { 

} 

Tôi muốn vượt qua một tham số thông điệp tới nó mà tôi có thể trở lại. Tôi cố gắng này, nhưng nó sẽ không làm việc:

function checkboxRequiredValidator(c: AbstractControl, msg) { 
    return c.value ? null : { 
     message: msg 
    }; 
} 


@Directive({ 
    selector: '[checkbox-required-validator]', 
    providers: [ 
     { provide: NG_VALIDATORS, multi: true, useValue: checkboxRequiredValidator } 
    ] 
}) 
export class CheckboxRequiredValidator { 
    @Input('checkbox-required-validator') msg: = 'default message'; 

} 

Bất kỳ trợ giúp sẽ được đánh giá

Trả lời

3

Bạn có thể thực hiện các chỉ thị riêng của mình validator. Bằng cách đó bạn có thể sử dụng đầu vào tin nhắn.

import { forwardRef } from '@angular/core'; 
import { Validator } from '@angular/forms'; 

@Directive({ 
    selector: '[checkbox-required-validator]', 
    providers: [ 
    { 
     provide: NG_VALIDATORS, 
     multi: true, 
     useExisting: forwardRef(() => CheckboxRequiredValidator) 
    } 
    ] 
}) 
export class CheckboxRequiredValidator implements Validator { 
    @Input('checkbox-required-validator') msg = 'default message'; 

    validate(c: AbstractControl) { 
    return c.value ? null : { 
     required: this.msg 
    }; 
    } 
} 
+0

này cũng sẽ làm việc với các dữ liệu mô hình mà bạn muốn vượt qua miễn là bạn suy nó ({ { chế độ l.property}}) –

+0

@GlennBullock bạn có thể truyền dữ liệu mô hình bằng cách nào? Khi tôi làm điều này, tôi luôn nhận được không thể ràng buộc lỗi. –

+0

bạn có thể giải thích? Tôi đang mắc kẹt tại cùng một điểm – desperado06

3

bạn có thể thay đổi chức năng hiện tại của bạn và thêm một agrument đến việc đóng cửa, bạn cũng có thể thêm nó vào riêng lớp xác nhận tùy chỉnh của bạn như vậy (và ví dụ viết một hàm maxVal):

export class MyValidators 
{ 
     public static maxVal(maxVal: number) { 
     return (c: FormControl) => { 
      return c.value > maxVal ? 
       { 'maxVal': { 'MaxValue': maxVal, 'actualValue': c.value } } : 
       null;   
     } 
    } 

và sau đó sử dụng nó trong FormControl của bạn, và gửi tham số (ví dụ, 100) với chức năng xác nhận:

let fc:FormControl = new FormControl('name', MyValidators.maxVal(100)); 
Các vấn đề liên quan