【问题标题】:How to create RxJS subject in Angular 2?如何在 Angular 2 中创建 RxJS 主题?
【发布时间】:2016-11-05 14:27:02
【问题描述】:

我可以在下面提到的我的角度组件中创建一个 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);
    });

但我不知道如何创建一个 Subject ,有人可以提供一个例子 一样的吗?

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    这是一个笨蛋:http://plnkr.co/edit/jLtFLjWrvHGI0ZPHl10B?p=preview

    import {Subject} from 'rxjs/Subject';
    
    @Injectable()
    export class MyService {
    
        public invokeEvent:Subject<any> = new Subject();
    
        constructor() {}
    }
    

    像 observable 一样订阅它:

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

    然后用 next 再次将值推送给它,就像一个 observable 一样

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

    【讨论】:

    • 我想知道我是否真的需要一个完整的课程才能将Injectable 放在Subject 之上。也许我们可以将 Subject 的一个裸实例推入 providers 数组?
    • @Gherman 问题是您通常将主题放在共享服务中,因此您不必为所有主题创建可注入对象。这只是一个例子。
    • 碰巧我的共享服务只包含一个 BehaviorSubject,没有别的。我需要的一切都已经在 BehaviorSubject 中实现了。因此,主题似乎必须是一个共享服务,而不是一个共享服务。我只有一堆可以改变状态或查看状态的组件。
    • @Gherman hmm 可能类似于{provide: mySubject, useFactory: ()=&gt; new BehaviourSubject()} 但我认为这将再次在后台创建一个类。明天我会尝试测试/创建一个 plunker。
    【解决方案2】:

    使用Rx.Subject配合Angular和不使用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,然后在你需要的地方订阅它,并触发事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2016-11-24
      • 1970-01-01
      • 2018-10-02
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多