2017-08-14 41 views
1

我一直在學習角,到目前爲止,我已經得到了基本的基礎了。我想更深潛入RxJS和觀測量,但每次我試圖在網上跟着教程的時候,總是有這些trivials錯誤,我感到非常愚蠢,我解決不了他們,卡住這些教程的第一步。例如,我在下面Rangle.io的對觀測的教程,但.next(42).next(43),並.push(value)返回錯誤說Argument of type '42' is not assignable to paramter of type 'number[]'無法獲得基本的觀測量工作

在一些教程和RxJS官方GitHub中,他們使用import Rx from 'rxjs/Rx'import * Rx from 'rxjs'Rx,但它在我的項目中不起作用。不知道爲什麼我必須使用import { Observable } from 'rxjs/Observable'而不是導入所有內容。

無論如何,我錯過什麼是導致錯誤的操作?

import { Component } from '@angular/core'; 

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

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

    private data: Observable<Array<number>>; 
    private values: Array<number> = []; 
    private anyErrors: boolean; 
    private finished: boolean; 

    constructor() {} 

    init() { 
    this.data = new Observable(observer => { 
     setTimeout(() => { 
     observer.next(42); 
     }, 1000); 

     setTimeout(() => { 
     observer.next(43); 
     }, 1000); 

     setTimeout(() => { 
     observer.complete(); 
     }, 3000); 
    }); 

    const subscription = this.data.subscribe(
     value => this.values.push(value), 
     error => this.anyErrors = true, 
    () => this.finished = true 
    ); 
    } 
} 

回答

4

您看到的錯誤是因爲您聲明您的Observable將生成Array<number>類型的元素,但是您將其設置爲產生number值。

如果更改

private data: Observable<Array<number>>;

private data: Observable<number>;

應該可以解決您的問題。

記住,觀測量應該被設置爲每一個對象的類型,它們會發出例如<number>,而不是像<Array<number>> *

*當然,除非你觀察到的每一次不實際發射對象的集合......

+1

這也是我看到的。該教程正在使用ng 2.0.0和rxjs 5.0.0測試版。當時肯定有什麼不妥之處才允許這樣做。 –

+0

我明白了,這很有道理,謝謝指出!學習角已被證明是比我想象的更令人沮喪的,儘管有教程豐​​富的在線... – midnightnoir

+0

如果你想檢查出我剛剛更新了這一個角4.3上週:HTTPS://app.pluralsight。 com/library/courses/angular-2-getting-started-update /目錄(你可以註冊一個免費的星期。) – DeborahK

0

有一個工作Plunker這裏:http://plnkr.co/edit/SA25mG?p=preview

它只有兩個進口:

import {Component} from '@angular/core'; 
import {Observable} from 'rxjs/Observable'; 

你不顯示HTML,所以我假設你有類似這樣的東西plunker ?

+0

是啊,我貼我的代碼到Rangle的plnkr,它排放的列表或集合作品。但我不知道爲什麼我的項目顯示錯誤,即使我從Rangle的例子中複製整個代碼。我忘記取出最後一次導入,我正在使用它來嘗試另一個教程並忘記取出它。 – midnightnoir