Угловой 5 Поведенческий предмет - PullRequest
0 голосов
/ 03 октября 2018

У меня есть форма, которая принимает input и что input будет использоваться моим API для извлечения данных.Что касается углов, я могу использовать @input или Behavioural subject для совместного использования этого значения с дочерними компонентами или несвязанными компонентами.

Поскольку мой ввод будет однократным, почему я не могу использовать службу с закрытой переменнойчтобы поделиться им с другими компонентами, а не с использованием @input и поведенческого субъекта?

Что я говорю:

В шаблоне:

<html>
  <body>

    EmployeeID <input type="text">

    <button type="submit" (click) ="onsubmit()>Submit</button>

  </body>
</html>

В компоненте:

onsubmit() {
  this.myservice.addData(inputValue)
}     

А в сервисе:

private myinput    

addData(input){
  this.myinput.add(input)
}

И это просто грубый код ине актуально ..

1 Ответ

0 голосов
/ 03 октября 2018

Ну, конечно, вы можете ... вроде.Закрытые переменные доступны только внутри их собственного класса, поэтому это должна быть публичная переменная.

Однако вы потеряете основное преимущество BehaviorSubject.Если значение совместно используется несколькими компонентами, преимущество Subject состоит в том, что эти подписчики будут обновляться асинхронно с этим значением, когда это значение установлено.В противном случае эти компоненты должны будут обнулять проверку этого значения, а не просто получать его реактивно.Эти компоненты также будут получать обновления этого значения реактивно, поэтому, если это значение обновляется вместо того, чтобы оставаться статическим, BehaviorSubject становится гораздо более полезным.

Еще одно замечание: наличие значений как BehaviorSubjects или дажеprivate BehaviorSubjects для службы с asObservable геттерами - это шаблон проектирования, обычно встречающийся в «магазинах», или сервисы с отслеживанием состояния, которые становятся популярными в библиотеках, таких как @ngrx/store.

Angular isочень реактивная программа, построенная на RxJS, но в конечном итоге использование Observable s в вашем приложении все еще остается выбором дизайна.

Кроме того, при наличии общей переменной обычно лучше всегосделайте это значение неизменным извне службы - либо написав только получатель для этого значения, либо оставив его закрытым и сделав его доступным только через методы.

...