如何订阅与另一个Observable合并的Observable?

时间:2017-08-04 05:20:39

标签: angular rxjs

更新

似乎我从错误的地方导入了Observable ......这太混乱了,因为我有这句话import 'rxjs/add/observable/fromevent'; ......

所以我改变了: import { Observable } from 'rxjs/observable'; 至: import { Observable } from 'rxjs';

现在得到不同的错误:

  

错误类型错误:无效的事件目标

更新结束

export class AppComponent { 

  @ViewChild('b') button;

  posts: any[];
  clickStream$: Observable<any>;

    constructor(http: Http){  
       this.clickStream$ = Observable.fromEvent(this.button, 'click').mergeMap(
         () => {
           var randomOffset = Math.floor(Math.random() * 500);
           return http.get('https://api.github.com/users?since=' + randomOffset);
         });
    }  

    ngOnInit() {
      this.clickStream$.subscribe(res => { this.posts = res.json()});
    }
}

在这里,我获得了一个按钮点击流,然后我希望它从get方法合并到其他observable,但在url的末尾有随机数。因此,我的最终目标是在每次单击按钮时呈现不同的API用户列表。

HTML:

<button>Click</button>

<div *ngFor="let post of posts">
{{ post.login }}
</div>

控制台错误:

  

错误类型错误:    WEBPACK_IMPORTED_MODULE_1_rxjs_observable .Observable.fromEvent不是函数

2 个答案:

答案 0 :(得分:1)

对我所做的一切都没有完全确定,但似乎已经使用了:

import { Component, ViewEncapsulation, OnInit, OnChanges, SimpleChanges, ViewChild, ElementRef } from '@angular/core';
import { initializeApp, database } from 'firebase';
import { Observable } from 'rxjs';
import { Http } from '@angular/http';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent { 

  @ViewChild('b') button: ElementRef;

  posts: any[];
  clickStream$: Observable<any>;

    constructor(private http: Http){  
    }  

    ngOnInit() {
       this.clickStream$ = Observable.fromEvent(this.button.nativeElement, 'click').mergeMap(
         () => {
           var randomOffset = Math.floor(Math.random() * 500);
           return this.http.get('https://api.github.com/users?since=' + randomOffset);
         });

      this.clickStream$.subscribe(res => { this.posts = res.json()});
    }
}

答案 1 :(得分:0)

试试这个:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';