54 votes

TypeError : search.valueChanges.debounceTime n'est pas une fonction

Je suis en train d'apprendre angular2. Au moment d'appliquer quelque chose aux changements d'entrée, j'obtiens l'erreur.

app.ts :

export class AppComponent {
    form: ControlGroup;

    constructor(fb: FormBuilder) {
        this.form = fb.group({
            search: []
        });

        var search = this.form.find('search');
        search.valueChanges
            .debounceTime(400)
            .map(str => (<string>str).replace(' ',''))
            .subscribe(x => console.log(x));
    };

 }

Erreur :

enter image description here

Comment résoudre ce problème ? Est-ce que quelque chose m'échappe ?

Démonstration de Plunker

N.B. Je ne peux rien produire chez plunker car j'écris angular2 pour la première fois chez plunker maintenant. Je n'ai écrit que mon code app.ts sur plunker. J'ai montré la capture d'écran de l'erreur depuis mon ordinateur local. Je vous serais également reconnaissant si vous me disiez comment faire fonctionner un projet angular2 dans Plunker.

0 votes

En fait, vous mélangez les importations d'angular2 dans votre plunker, voir ici la démonstration de travail du plunker angular2. plnkr.co/edit/XNvJChxONhZpY04Iruf6?p=preview

0 votes

Désolé, je ne sais toujours pas comment l'écrire chez Plunker. J'ai suivi le clic : new>Angular Js>2.0.X(TS). Ensuite, j'ai remplacé le code de app.ts par mon app.ts. Que dois-je faire d'autre pour ? remplacer le code de tous les fichiers comme app.js, index.html etc. par le mien ?

0 votes

Oui, en fonction de vos besoins, vous devez également modifier l'index.html, mais il est préférable d'utiliser le plunker de quelqu'un d'autre pour écrire votre code, car cela prend plus de temps d'écrire votre propre code.

100voto

Pardeep Jain Points 4603

Vous devez juste importer ces derniers pour supprimer votre erreur. Vous obtenez une erreur d'exécution parce que les Observables sont fournis par défaut avec seulement quelques opérateurs. Vous devez les importer explicitement comme ceci -

import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/map';

<a href="http://plnkr.co/edit/8PIkY2OQ3ZO8mmZNKNNP?p=preview" rel="noreferrer">Working example</a>

Mise à jour

À partir d'Angular 6, debounceTime est importé de la manière suivante : -.

import { debounceTime } from 'rxjs/operators';

d'autres importations que vous pouvez importer à partir de ce chemin sont -

  • switchMap
  • tapez
  • carte
  • distinctUntilChanged

etc.

2 votes

Je l'importe en utilisant import {debounceTime} from "rxjs/operator/debounceTime" ce qui ne fonctionne pas.

1 votes

On dirait qu'il y a une différence entre les deux fichiers, le mien s'est autocomplété comme ça aussi. Assurez-vous que vous avez supprimé toutes les importations existantes et remplacez-les par celles de Pardeep. Ensuite, assurez-vous que vos valueChanges sont conformes à ce qui est décrit dans l'OP, vérifiez votre modèle pour vous assurer que vous n'y avez pas apporté de modifications et cela devrait fonctionner.

2 votes

Vous devez importer debounceTime() comme ceci pour angular 6 import { debounceTime } from 'rxjs/operators' ;

14voto

Mettez debounceTime(400) dans une fonction pipe().

exemple

var search = this.form.find('search');
    search.valueChanges
        .pipe(debounceTime(400))
        .map(str => (<string>str).replace(' ',''))
        .subscribe(x => console.log(x));

6voto

Adrian Points 466

Deux choses :

ajouter des importations pour chaque opérateur

import { debounceTime, distinctUntilChanged } from 'rxjs/operators';

et ensuite utiliser des tuyaux pour passer tous les opérateurs RxJS

    this.searchTextInput.valueChanges
      .pipe(
        debounceTime(500),
        distinctUntilChanged(),
      )
      .subscribe((term): void => {
        console.log({ term });
      });

0voto

soni kumari Points 131

Vous pouvez essayer :

import { debounceTime } from 'rxjs/operators';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X