#angular
#angular
Вопрос:
Ситуация такова, что у меня есть несколько компонентов, таких как компонент A, в котором есть реактивная форма. Данные из форм собираются в одном сервисе. Теперь я хотел бы просмотреть эту форму в компоненте B, но после изменения пути на routerLink=»/ComponentB» данные из сервиса и компонента A больше не доступны. Ниже приведен код:
Компонент A
constructor(
private formBuilder: FormBuilder,
) {
this.step = this.formBuilder.group({
field: [''],
});
this.formService.stepReady(this.step, 'one');
}
Обслуживание
private stepOneSource: Subject<FormGroup> = new Subject();
stepOne: Observable<FormGroup> = this.stepOneSource.asObservable();
mainForm: FormGroup = this.formBuilder.group({
one: this.formBuilder.group({
field: [''],
}),
constructor(
private formBuilder: FormBuilder
) {
this.stepOne.subscribe(form =>
form.valueChanges.subscribe(val => {
this.mainForm.controls.one.patchValue(val);
})
);
stepReady(form: FormGroup, part) {
switch (part) {
case 'one': {
this.stepOneSource.next(form);
break;
}
}
}
Комментарии:
1. когда вы реализуете stepOneSource.next, компонента B нет, поэтому он не может получить ничего. Я предположил, что просто сохраняю в переменной сервиса FormGroup
this.formService.formVariable=this.step
, а в ngOnInit компонента B получаю переменнуюthis.stepFromComponentB=this.formService.formVariable
. ПРИМЕЧАНИЕ: если вы хотите поделиться только «значением», передайте только значение формы
Ответ №1:
Используется BehaviourSubject
, когда значение необходимо сохранить.
private stepOneSource: Subject<FormGroup> = new BehaviourSubject();
Комментарии:
1. Это полезно. Проблема заключалась в том, что я сбрасывал ComponentB, снова настраивая providers: [FormService] Теперь у меня проблема в том, что после возврата из ComponentB обратно в ComponentA форма пуста.