У вас есть несколько вариантов, если вы недовольны использованием маршрутизации для достижения этой цели.
Прежде чем я углублюсь в это, вам может быть проще просто использовать механизм вкладок без маршрутизации.
Самым простым решением здесь является общий сервис, который разделяет форму между компонентами.
оформить услугу типа:
@Injectable()
export class PersonFormService {
private _form: FormGroup;
get form() {
return this._form;
}
constructor(private fb: FormBuilder) {
this._form = this.fb.group({
title: ['',Validators.required],
salary:['',Validators.required],
name: ['',Validators.required],
age:['']});
}
}
затем предоставьте эту услугу на вашем родительском уровне:
@Component({
selector: 'app-person-form',
templateUrl: './person-form.component.html',
styleUrls: ['./person-form.component.css'],
providers: [PersonFormService]
})
затем используйте форму в ваших компонентах:
export class PersonJobComponent implements OnInit {
constructor(private personFormService:PersonFormService) { }
formJob:FormGroup;
ngOnInit() {
this.formJob= this.personFormService.form;
}
submit(){
console.log(this.formJob.value);
}
}
и
export class PersonInfoComponent implements OnInit {
constructor(private personFormService: PersonFormService) { }
form:FormGroup;
ngOnInit() {
this.form=this.personFormService.form;
}
}
Теперь у вас будет вся форма в обоих ваших компонентах.
рабочий стекблиц: https://stackblitz.com/edit/angular-qrym5k
Если вы хотите обрабатывать две вложенные формы более отдельно для целей проверки или чего-либо другого, просто реструктурируйте конструкцию формы в службе на 2 группы форм.
что-то вроде:
@Injectable()
export class PersonFormService {
private _form: FormGroup;
get combinedForm() {
return this._form;
}
get jobForm() {
return this._form.get('job') as FormGroup;
}
get infoForm() {
return this._form.get('info') as FormGroup;
}
constructor(private fb: FormBuilder) {
this._form = this.fb.group({
info: this.fb.group({
name: ['',Validators.required],
age:['']
}),
job: this.fb.group({
title: ['',Validators.required],
salary:['',Validators.required]
})
});
}
}
тогда просто используйте personFormService.infoForm или .jobForm соответствующим образом в ваших соответствующих компонентах.