I was trying to use the class-validator decorator library for the validation processes . So, I was implemented on my sample project. But, it is not working. The sample project is trying to create sample projects with user inputs and I am trying to check those inputs(example on my code I am trying to validate contains of title with that class-validator. But, decorators are executing before the set of value of input elements. So, the title looks empty all time, and validation fails.
What I am missing? How can I use that library for valid to upcoming value from inputs?
My app.ts = >
import { validate, Contains } from "class-validator";
class ProjectInput {
templateElement: HTMLTemplateElement;
hostElement: HTMLDivElement;
formElement: HTMLFormElement;
@Contains("hello")
titleInputElement: HTMLInputElement;
descriptionInputElement: HTMLInputElement;
peopleInputElement: HTMLInputElement;
constructor() {
this.templateElement = <HTMLTemplateElement>(
document.getElementById("project-input")!
);
this.hostElement = <HTMLDivElement>document.getElementById("app")!;
const importedNode = document.importNode(
this.templateElement.content,
true
);
this.formElement = <HTMLFormElement>importedNode.firstElementChild;
this.formElement.id = "user-input";
this.titleInputElement = <HTMLInputElement>(
this.formElement.querySelector("#title")
);
this.descriptionInputElement = <HTMLInputElement>(
document.getElementById("description")
);
this.peopleInputElement = <HTMLInputElement>(
document.getElementById("people")
);
this.configure();
this.attach();
}
private submitHandler(event: Event) {
event.preventDefault();
console.log(this.titleInputElement.value);
}
private configure() {
this.formElement.addEventListener("submit", this.submitHandler.bind(this));
}
private attach() {
this.hostElement.insertAdjacentElement("afterbegin", this.formElement);
}
}
const prjInputExample = new ProjectInput();
validate(prjInputExample).then((errors) => {
// errors is an array of validation errors
if (errors.length > 0) {
console.log("validation failed. errors: ", errors);
} else {
console.log("validation succeed");
}
});
index.html =>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>ProjectManager</title>
<link rel="stylesheet" href="app.css" />
<script src="bundles/bundle.js" defer></script>
</head>
<body>
<template id="project-input">
<form>
<div class="form-control">
<label for="title">Title</label>
<input type="text" id="title" />
</div>
<div class="form-control">
<label for="description">Description</label>
<textarea id="description" rows="3"></textarea>
</div>
<div class="form-control">
<label for="people">People</label>
<input type="number" id="people" step="1" min="0" max="10" />
</div>
<button type="submit">ADD PROJECT</button>
</form>
</template>
<template id="single-project">
<li></li>
</template>
<template id="project-list">
<section class="projects">
<header>
<h2></h2>
</header>
<ul></ul>
</section>
</template>
<div id="app"></div>
</body>
</html>