Пользовательские сообщения валидатора угловой формы, вызывающие ошибку

У меня есть собственный валидатор для внесения в черный список слов из контроллеров форм:

import { AbstractControl } from '@angular/forms';

const blacklist = ['poop']; 
export function Blacklist(control: AbstractControl) {

    let comment = control.value.split(' ');
    for (let i = 0, j = comment.length; i < j; i++ ) {
        if (blacklist.indexOf(comment[i]) !== -1) { // -1 = is no match in array
            return {
                validateBlacklist: {
                    blacklist: false
                }
            }
        } else {

        }
    }
    return null;
}

Все отлично работает! Но когда я пытаюсь сделать сообщение проверки, я получаю:ERROR TypeError: Cannot read property 'validateBlacklist' of null на каждый ключ вверх, если это не слово в моем массиве черного списка...

Из этого:

<div *ngIf="commentForm.controls['newComment'].errors.validateBlacklist && commentForm.controls['newComment'].touched">Error</div>

Что я делаю неправильно?!

1 ответ

Произошла ошибка из-за состояния ngIf.

объект errors не имеет validateBlacklist объект на момент проверки и его текущее значение равно нулю. Пытаться console.log(this.commentForm.controls['newComment'].errors) первый.

Так должно выглядеть так:

public isErrorOccurred(): boolean {
    if(
        'validateBlacklist' in this.commentForm.controls['newComment'].errors &&
        this.commentForm.controls['newComment'].touched
    ) {
        return 'blackList' in this.commentForm.controls['newComment'].errors.validateBlacklist;
    }
}

ngIf:

*ngIf="isErrorOccurred()"
Другие вопросы по тегам