2016-06-24 4 views
9

Ich benutze "angular2 webpack" und "angular2/form, beobachtbare", traf aber einen Fehler, die Hilfe benötigen ..angular2 beobachtbare Eigenschaft 'debouceTime' existiert nicht auf Typ 'beobachtbare <any>'

Es ist eine eigene Form Validator -

import {Observable} from 'rxjs/Rx'; 
import {REACTIVE_FORM_DIRECTIVES,FormControl, FormGroup, Validators} from '@angular/forms'; 

emailShouldBeUnique(control:FormControl) { 
    return new Observable((obs:any)=> { 
     control.valueChanges 
     .debouceTime(400) 
     .distinctUntilChanged() 
     .flatMap(term=>return !this.userQuery.emailExist(term)) 
     .subscribe(res=> { 
      if (!res) {obs.next(null)} 
      else {obs.next({'emailExist': true}); }; } 
     )});} 

ich die Datei "/projection_direction/node_modules/rxjs/operator/debounceTime.js" finden konnte

warum gibt es so die error--

Property 'debouceTime' existiert nicht auf Typ 'beobachtbar'.

Antwort

26

Seien Sie sicher, Sie haben das in main.ts eingeleitet (wo die App bootstraped ist)

import "rxjs/add/operator/map"; 
import "rxjs/add/operator/debounceTime"; 
... 

oder alle auf einmal

import "rxjs/Rx"; 

VERLÄNGERN

dort ist a working example

//our root app component 
import {Component, EventEmitter, ChangeDetectorRef} from '@angular/core' 
import {Observable} from "rxjs/Rx"; 
@Component({ 
    selector: 'my-app', 
    providers: [], 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 

     <div>debounced message: {{message}}</div> 
    </div> 
    `, 
    directives: [] 
}) 
export class App { 

    protected message: string; 
    protected emitter = new EventEmitter<string>(); 
    public obs: Observable<string>; 

    constructor() { 
    this.name = 'Angular2 (Release Candidate!)' 

    this.obs = this.emitter 
     .map(x => x) 
     .debounceTime(1200) 
     ; 

    this.obs.subscribe(msg => this.message = msg); 
    } 

    ngOnInit(){ 
    this.emitter.emit("hello after debounce"); 
    } 
} 

und das funktioniert, wenn in main.ts haben wir:

//main entry point 
import {bootstrap} from '@angular/platform-browser-dynamic'; 
import {App} from './app'; 

import "rxjs/Rx"; 

bootstrap(App, []) 
    .catch(err => console.error(err)); 

bestellen here

+0

ich füge 'import 'hinzu rxjs/add/operator/map"; importieren Sie "rxjs/add/operator/debounceTime" jetzt; 'in der main.ts ,, aber der Fehler ist immer noch ... –

+0

Ich habe einen Plünderer für Sie erstellt, erweiterte die Antwort .. hoffe, es sollte helfen –

+0

@ RadimKöhler Ich denke, der Plunker ist fehlerhaft. Persönlich sehe ich TS Fehler 'Argument des Typs '(Begriff: any) => void' ist nicht zu Parameter des Typs '(Wert: beliebig, Index: Nummer) => ObservableInput <{}>'. Der Typ 'void' kann nicht dem Typ 'ObservableInput <{}>' .' zugeordnet werden – BenRacicot

3

Sie haben einen Tippfehler hier. Es ist debounceTime, nicht debouceTime :)