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