角科目

时间:2018-06-22 13:11:34

标签: angular

因此,假设您有一个包含以下组件和服务文件的角度应用程序。在组件中,用户在服务文件中订阅此主题。

现在,假设有人在服务文件中发出服务器请求,并从服务器获得响应。

当我们收到服务器响应并使用next()方法触发Subject时,我们只会在订阅了此Subject的组件中或基本上每个当前正在使用此应用且已打开此订阅的人中接收数据在他的组件中?

组件

    export class exampleComponent implements OnInit {

ngOnInit() {
    this.exampleService.exampleSubject().subscribe();
    }

    }

服务

export class exampleService {
exampleSubject = new Subject();

someOtherMethodWithHttpRequest(){
return this.http.get(url)
.pipe(map((data) => this.exampleSubject.next()))
}
}

1 个答案:

答案 0 :(得分:2)

这将是因为它是一个主题,并且主题是多播的。

编辑:我最初的回答是否,因为只有BehaviorSubject和ReplaySubject是多播的。这是错误,所有主题都是多播的。

在这种情况下,使用BehaviorSubject是个好主意:它可以确保每个订阅者都将从api调用中接收值,即使他们在api调用发生后进行订阅也是如此。如果您在主题发出其值之后订阅该主题,您将永远不会从该api调用中收到该值。