Стратегия многоуровневой эмиссии событий - PullRequest
1 голос
/ 23 сентября 2019

Существует ли официальное соглашение о передаче данных от самого нижнего компонента в стеке вложенных компонентов?Я придерживаюсь соглашения умного родителя, глупого ребенка, и у меня возникают проблемы с выбором между тем, чтобы внук передавал его родителю, а родитель - бабушке и дедушке, а не просто с помощью службы.Я не решаюсь использовать службу, потому что компоненты связаны между собой, и я хочу избежать чрезмерного загрязнения моих служб темами.

Я понимаю, что лучше всего сохранять структуру папок как можно более плоской, а вложенные компоненты должныпо возможности избегать, но в моем конкретном случае имеет смысл иметь его в глубину 3.

Вариант 1: Внук до бабушки и дедушки

Служба <- Бабушка и дедушка <- Родитель <- Бабушка </p>

grandchild.component.ts

saveFormValues() {
    this.eventEmitter.emit(this.myForm.value);
}

parent.component.html

<app-grandchild (eventEmitter)=relayFormValues($event)></app-grandchild>

parent.component.ts

relayFormValues(values) {
    this.relayEvent.emit(values)
}

grandparent.compent.html

<app-parent (relayEvent)=saveChanges($event)></app-parent>

grandparent.component.ts

saveChanges(values) {
    this.myService.save(values).subscribe(() => {...});
}

Вариант 2

Служба <- Дедушка <- Служба <- Внук </p>

myservice.service.ts

formSaveEventSource = new Subject<any>;
formSaveEvent$ = this.formSaveEventSource.asObservable();
...
saveFormEvent(values) {
    this.formSaveEventSource.next(values)
}

save(values) {
// http request
}

grandchild.component.ts

saveFormValues() {
    this.myService.saveFormEvent(this.myForm.value);
}

grandparent.component.ts

this.formSaveSub = this.myService.formSaveEvent$.subscribe(data => {
  this.saveChanges(data);
});
...
this.saveChanges(data) {
  this.myService.save(data).subscribe(() => {...})
}

Я склоняюсь в сторону выбораIon 1 с реле Eventemitter, потому что с опцией 2 мы вызываем службу дважды.Опять же, просто проверяю, есть ли официальное соглашение или я просто переосмысливаю это.Официальные документы , кажется, говорят только о родителе и ребенке, но не более уровней, чем это.

...