ng-messages2
Version:
Angular version of ng-message
71 lines (63 loc) • 2.11 kB
text/typescript
import {
Component,
AfterContentInit,
QueryList,
ContentChildren,
ViewEncapsulation,
Input
} from '@angular/core';
import { FormControl } from '@angular/forms';
import { ClNgMessageDirective } from './ngMessage.directive';
export class ClNgMessagesComponent implements AfterContentInit {
/** Content for the error message given by <template error-message>. */
errorMessages: QueryList<ClNgMessageDirective>;
_currentError: ClNgMessageDirective = null;
control: FormControl;
private _messages: { [type: string]: ClNgMessageDirective } = {};
ngAfterContentInit() {
this._registerErrorMessages();
this._controlChanged();
}
_registerErrorMessages() {
this.errorMessages.forEach(error => {
if (error.type) {
this._messages[error.type] = error;
}
});
}
_controlChanged() {
this.control.valueChanges.subscribe((data?: any) => {
let messageFound = false;
if (this.control.dirty && this.control.invalid) {
for (const type in this._messages) {
if (this.control.hasError(type)) {
messageFound = true;
this._currentError = this._messages[type];
break;
}
}
}
if (!messageFound) {
this._currentError = null;
}
});
}
}