Blog>
Snippets

Form Control with Angular Elements in a Non-Angular Project

Illustrate how to create and control form inputs using Angular Elements, demonstrating validation and data submission in a non-Angular JavaScript project.
class CustomInputElement extends HTMLElement {
  connectedCallback() {
    this.innerHTML = `
      <form id="custom-form">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required />
        <button type="submit">Submit</button>
      </form>
    `;
    this.querySelector('#custom-form').addEventListener('submit', this.submitForm.bind(this));
  }

  submitForm(event) {
    event.preventDefault();
    const name = this.querySelector('#name').value;
    if (name) {
      console.log('Form submitted with name:', name);
      // Here you would typically handle the submission, e.g., sending the data to a server
    } else {
      console.log('Name is required');
    }
  }
}

customElements.define('custom-input', CustomInputElement);
This code defines a new custom element 'custom-input' that contains a simple form. It handles form submission with validation to ensure the 'name' field is filled out before logging the input or sending it elsewhere.
// Attaching Angular Elements to a Non-Angular Project
window.onload = function() {
  // Ensure that custom elements are defined before they are attached to the DOM
  if (customElements.get('custom-input')) {
    const customInputEl = document.createElement('custom-input');
    document.body.appendChild(customInputEl);
  } else {
    console.error('Custom element not defined.');
  }
};
This piece of code is used to append the 'custom-input' Angular element to the body of the document in a non-Angular project. It checks if the custom element is defined and if so, creates an instance of it and attaches it to the DOM.