RxJS Observable:' Skip不是一个功能' (或任何其他功能)

时间:2017-08-31 09:25:14

标签: javascript angular rxjs

我在使用RxJS时遇到了一个奇怪的错误,因为“方法”不是一个函数'。

我确实导入了Observable库。 我已经有了Observable数组,没有出现任何错误。

但是当我跳过或接受时,我会收到此错误。

如果我读得正确:

  

返回一个Observable,它跳过由...发出的第一个计数项   来源可观察。

由于我的observable包含Article,它应该跳过关于Observable权利的x条款?

这是代码

import { Component, OnInit } from '@angular/core';
import { Article} from '../../model/article';
import {  ArticleService} from '../../model/article.service';
import { Router } from '@angular/router';

import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

@Component({
  selector: 'app-liste-article',
  templateUrl: './liste-article.component.html',
  styleUrls: ['./liste-article.component.css']
})
export class ListeArticleComponent implements OnInit {

  articles: Observable<Article[]>;
  articlesPage: Observable<Article[]>;
  selectedArticle: Article;
  newArticle: Article;
  page = 1;
  itemPerPage = 2;
  totalItems = 120;

  constructor(private router: Router, private articleService: ArticleService) {

  }


  ngOnInit() {
    this.articles = this.articleService.getArticles();
    this.articlesPage = this.articles.skip((this.page - 1) * this.itemPerPage ).take(this.itemPerPage);

    //this.articlesPage = this.articles.slice(  (this.page - 1) * this.itemPerPage , (this.page) * this.itemPerPage );

  }
  onSelect(article: Article) {
    this.selectedArticle = article;
    this.router.navigate(['../articles', this.selectedArticle.id ]);
  }
  onPager(event: number): void {
    console.log('Page event is' , event);
    this.page = event;
    this.articlesPage = this.articles.skip((this.page - 1) * this.itemPerPage ).take(this.itemPerPage);

    console.log('tab' , this.articlesPage.count());
    //this.articleService.getArticles().then(articles => this.articles = articles);

  }

  getArticles(): void {
    this.articles = this.articleService.getArticles();
  }
  createArticle(article: Article): void {

    //this.articleService.createArticle(article)
      //.then(articles => {
       // this.articles.push(articles);
       // this.selectedArticle = null;
      //});
  }

  deleteArticle(article: Article): void {
    //this.articleService
     // .deleteArticle(article)
     // .then(() => {
      //  this.articles = this.articles.filter(b => b !== article);
      //  if (this.selectedArticle === article) { this.selectedArticle = null; }
      //});
  }
}

我尝试直接使用.skip(1),但收到同样的错误。

我查看了官方文件RxJS Observable,对我来说看起来还不错。看来情况还可以,因为我对函数的调用。两个arryas都是Observable所以我应该能够在一个上使用这些功能,并将结果放在另一个中吗?

我不知道这里有什么问题,可能是一个小细节,但我自己也看不到(因为我从这开始,我看到的细节较少)。

2 个答案:

答案 0 :(得分:4)

您希望以与skiptake相同的方式导入mapcatch

import 'rxjs/add/operator/skip';
import 'rxjs/add/operator/take';

答案 1 :(得分:0)

对于 rxjs@6.5.5,我必须进行以下更改:

  • 导入跳过

    import { skip } from "rxjs/operators";

  • 改变

    return this.udpstream.asObservable().skip(1);

    return this.udpstream.asObservable().pipe(skip(1));