返回和暴露角度服务中可观察到的

时间:2019-02-15 12:11:42

标签: angular rxjs

我已经看到了与角度服务中的可观察对象进行交互的两种方式:

@echo off
setlocal enabledelayedexpansion
for /f %%i in (ip.txt) Do (
      set "ip=%%i"
      echo !ip!
      ping !ip!
      nslookup !ip!
)

明显的区别是,使用方法为每次调用创建一个新的public getSomeData(): Observable<FooData> { ... } // or public someData$: Observable<FooData>; 实例,第二个选择共享一个相同的Observable实例(通常在构造函数中创建)。

两种方法的优缺点是什么?在两者之间进行选择时应该考虑什么?

2 个答案:

答案 0 :(得分:0)

您所说的话是不正确的,我可以列举的还不止于此:

public SomeData$() { ... }
public someData$ = new XXX(...);
public get someData$() { ... }
public someData$ = () => { ... }

他们都做同一件事,这是您选择对他们做的事情

实现有所不同,但是语法没有任何改变。

要回答这个问题,取决于可观察的类型以及对它的使用类型。

可观察物可以

冷可观察物是发出单个流然后停止的可观察物。 HTTP调用就是这样,或者of()调用的结果也是如此。

热可观察物是指不断监听的可观察物。 Subject就是这样。

您必须将它们用于有用的用途,但是您不必依靠语法来做到这一点。

选择所需的语法,然后在团队中实施。

例如,在我的研究中,我们倾向于将热的可观测对象用作数据源,并使用引用它的变量来公开可观测对象。

答案 1 :(得分:0)

恕我直言。简而言之:

  • 方法方法更适合业务逻辑层和请求API的服务

  • 对于与状态相关的服务(例如ngrx)和外部事件源,
  • 属性方法更好。

长答案:

使用方法,您可以直接与Observable进行交互,因此可以直接设置请求参数,过早完成请求参数等。通常,此处的数据参数因请求而异(请考虑类别或页面API请求)。示例:

按类别获取产品的服务。

和页面上的两个小部件,它们显示两个不同的类别。

-

使用属性,您可以在应用程序的许多部分之间共享Observable上的数据,尽管交互请求数据更为间接(例如ngrx,websocket,外部事件源,例如窗口滚动)。这样做的好处是它集中且不会有重复的请求。示例:

获取已登录用户数据的服务,该数据将在整个应用程序中使用。

在该服务中,您将拥有更新和重置它的方法以及一个可观察到的方式,所有关联方都将订阅

-

希望有帮助

相关问题