如何在Angular 2中创建RxJS主题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Angular 2中创建RxJS主题?相关的知识,希望对你有一定的参考价值。

我能够以下面提到的方式在我的角度组件中创建一个Observable

...
...
import { Observable } from 'rxjs/Observable';
..
...
let observable = new Observable( function subscribe(observer) {
        observer.next(1);
        observer.next(2);
        observer.next(3);
        observer.next(4);
        setTimeout(() => {observer.next(5); },9000);
    });

但是我不知道如何创建一个主题,有人可以提供相同的例子吗?

答案

使用带有Angular的Rx.Subject与没有Angular使用它没有什么不同,主要原理是相同的,请看下面的例子

const subject = new Rx.Subject();
const subscription = subject.subscribe(
  (data) => console.log(data),
  (err) => console.log(err),
  () => console.log('Completed')
);

subject.next(1);
subject.next(2);
subject.next(3);
subject.complete();
<script src="https://unpkg.com/@reactivex/rxjs@5.0.0-beta.7/dist/global/Rx.umd.js"></script>

您需要创建新的实例Rx.Subject,然后在您需要的地方订阅它,并触发事件。

另一答案

这是一个吸烟者:http://plnkr.co/edit/jLtFLjWrvHGI0ZPHl10B?p=preview

import {Subject} from 'rxjs/Subject';

@Injectable()
export class MyService {

    public invokeEvent:Subject<any> = new Subject();

    constructor() {}
}

订阅它就像一个可观察的:

  constructor(private _myService: MyService) {
         this._myService.invokeEvent.subscribe((value) => {
           console.log(value); 
         });
       }

并将值推送到它,就像下一个再次观察一样

  ngAfterViewInit(){
      this._myService.invokeEvent.next(1);
  }

以上是关于如何在Angular 2中创建RxJS主题?的主要内容,如果未能解决你的问题,请参考以下文章

角度服务中的 EventEmitter 或 RxJS 主题

如何通过 Java 在 Kafka 中创建主题

我们可以直接在Angular 4组件中订阅RxJs主题吗?

使用 RxJS 在 TypeScript 中创建 BaseObserver

Angular RxJs行为主题未正确更新

Angular 2:如何在组件将观察更改的服务中创建一个数组?