Angular 角5行为主体

Angular 角5行为主体,angular,angular5,angular-services,behaviorsubject,Angular,Angular5,Angular Services,Behaviorsubject,我有一个表单,它接受输入,我的API将使用输入来检索数据。根据angular,我可以使用@input或行为主体与子组件或无关组件共享此值 既然我的输入是一次性活动,为什么我不能使用带有私有变量的服务与不同的组件共享它,而不是使用@input和行为主体 我想说的是: 在模板中: <html> <body> EmployeeID <input type="text"> <button type="submit" (click) ="o

我有一个表单,它接受
输入
,我的API将使用
输入
来检索数据。根据angular,我可以使用
@input
行为主体
与子组件或无关组件共享此值

既然我的输入是一次性活动,为什么我不能使用带有私有变量的服务与不同的组件共享它,而不是使用
@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)
}
并且在服务中:

<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)
}

这只是一个粗略的代码,而不是实际的代码。

好吧,你当然可以……某种程度上。私有变量只能在它们自己的类中访问,所以它必须是一个公共变量

但是,您将失去
行为主体
的主要好处。如果该值与多个组件共享,则设置
主题的好处在于,设置该值时,这些订阅服务器将以该值异步更新。否则,这些组件将不得不对该值进行null检查,而不是简单地以反应方式接收该值。这些组件还将收到对该值的更新,因此如果该值正在更新而不是保持静态,则
行为主体
将变得更加有用

另一个注意事项是,在具有可观察的getter的服务上,将值设置为
BehaviorSubjects
甚至private
BehaviorSubjects
,这是“商店”中常见的设计模式,或者是像这样的库所流行的有状态服务

Angular是一个基于RxJS构建的反应性很强的程序,但归根结底,在应用程序中使用
Observable
s仍然是一种设计选择


此外,简单地拥有一个共享变量,通常最好的做法是使该值从服务外部不可变——要么只为该值编写一个getter,要么保持它的私有性,并且只能通过方法访问它。

当然,你可以……某种程度上。私有变量只能在它们自己的类中访问,所以它必须是一个公共变量

但是,您将失去
行为主体
的主要好处。如果该值与多个组件共享,则设置
主题的好处在于,设置该值时,这些订阅服务器将以该值异步更新。否则,这些组件将不得不对该值进行null检查,而不是简单地以反应方式接收该值。这些组件还将收到对该值的更新,因此如果该值正在更新而不是保持静态,则
行为主体
将变得更加有用

另一个注意事项是,在具有可观察的getter的服务上,将值设置为
BehaviorSubjects
甚至private
BehaviorSubjects
,这是“商店”中常见的设计模式,或者是像这样的库所流行的有状态服务

Angular是一个基于RxJS构建的反应性很强的程序,但归根结底,在应用程序中使用
Observable
s仍然是一种设计选择


此外,简单地拥有一个共享变量,通常最好的做法是使该值从服务外部不可变——要么只为该值编写一个getter,要么保持它的私有性,并且只能通过方法访问它。

谁说你不能这样做?在我看来,这不利于良好的实践,但该代码非常有效。@MateuszWitkowski,因此,当我们必须使用行为主体时。。正确的用例是什么?如果你指的是最佳实践。。在那里我可以找到更多关于这方面的详细信息。当值有可能发生变化时,您会使用行为主体,并且您的下游组件需要得到关于该变化的通知。行为主体在此解释:谁说您不能这样做?在我看来,这不利于良好的实践,但该代码非常有效。@MateuszWitkowski,因此,当我们必须使用行为主体时。。正确的用例是什么?如果你指的是最佳实践。。我可以在这里找到更多关于这方面的详细信息。当值有可能发生变化时,您可以使用行为主体,并且您的下游组件需要得到关于该变化的通知。此处解释了行为主体: