Разделите формы на компоненты в угловой

#angular #angular-reactive-forms #angular-forms

Вопрос:

Я успешно создал страницу, на которой есть две формы. У меня возникли трудности с тем, как разделить две формы на отдельные компоненты. Я уже добавил компоненты для каждой формы. Как бы я сделал это рекомендуемым и правильным способом?

Пожалуйста, проверьте мой stackblitz здесь, НАЖМИТЕ ЗДЕСЬ

 this.personalDetails = this.formBuilder.group({
  name: ["", Validators.required],
  email: ["", Validators.required],
  phone: ["", Validators.required],
});
this.addressDetails = this.formBuilder.group({
  city: ["", Validators.required],
  address: ["", Validators.required],
  pincode: ["", Validators.required],
});
 

Комментарии:

1. поместите входные реквизиты для получения группы форм внутри компонентов и просто используйте селекторы компонентов внутри компонента приложения на месте.

Ответ №1:

Чтобы разделить большой .html на два компонента, вы можете выполнить три шага

  1. Используйте тот же .html, что и основной.
  2. Необходимые переменные , которые вы используете @Input , например, для «личной информации», вам нужны
       @Input() personalDetails:FormGroup
      @Input() personal_step = false;
 
  1. Функции являются отправителями событий, поэтому для получения личной информации вам необходимо
     @Output() next:EventEmitter<any>=new EventEmitter<any>()
 
  1. Немного измените .html -действительно выйдите "*ngIf="step==1" и
    измените (click)="next()" , чтобы использовать вывод
     <input (click)="next.emit(null)" .../>
 
  1. Некоторые функции необходимо перевести в компонент
  2. Вам также нужно скопировать файл .css. Я выбираю поместить файл .css в файл styles.css (он является общим для всех приложений

Я раздвоил твой стакблитц здесь

Ответ №2:

Ты почти на месте, ты можешь сделать что-то вроде этого:

личная информация.компонент.ts

 import { Component, Input, OnInit } from '@angular/core';

export interface PersonalInfo {
  name: string
  email: string
  phone: string
}

@Component({
  selector: 'app-personal-info',
  templateUrl: './personal-info.component.html',
  styleUrls: ['./personal-info.component.css']
})
export class PersonalInfoComponent implements OnInit {

  @Input() personal: PersonalInfo; // <---- input data for your component

  constructor() { }

  ngOnInit() {
  }

}
 

затем в личном компоненте html:

 <form>
  <input type="text" [(ngModel)]="personal.name" />
</form>
 

и в вашем компоненте приложения что-то вроде:

 <personal-info [personal]="currentUser.personalInfo" />
 

Комментарии:

1. Ты можешь раскошелиться на мой стакблитц?

2. В вашем случае вводом компонента может быть сама группа форм.

3. Нет, я не собираюсь делать эту работу за тебя, извини

4. вы можете попробовать это stackblitz.com/edit/… @SimonCorcos