2017-06-20 4 views
0

lesen Ich versuche, eine benutzerdefinierte Rohr erstellen ich die Anweisungen richtig followerd haben, aber es halten mich, dass Fehler geben, wenn ich versuche, meine Liste zu filternTypeerror: kann Eigenschaft ‚toLocaleLowerCase‘ undefinierter

hier ist meine Pfeife Code

import { Pipe, PipeTransform } from '@angular/core'; 
import { Icandidat } from './candidat/icandidat'; 

@Pipe({ 
    name :'personFilter' 
}) 

export class PipeFilter implements PipeTransform{ 


    transform(value: Icandidat[], filterBy : string) : Icandidat[] { 
     filterBy = filterBy ? filterBy.toLocaleLowerCase(): null; 
     return filterBy? value.filter((person : Icandidat)=> 
      person.candidatNom.toLocaleLowerCase().indexOf(filterBy) ! ==-1) : value; 
    } 
} 

hier ist meine Schnittstelle

export interface Icandidat { 
    prog1 : string ; 
    progName1 : string ; 
    progEl1 : string ; 
    candInfo : any []; 
    filterBy : string ; 

    candidatID : number; 
    candidatNom : string; 
    canditatPrenom : string ; 
    candidatParti : string; 
    candidatDepartement : string; 
    candidatCommune : string ; 

    candidats : Icandidat; 
    errorMessage : string; 


} 

meine Komponente

import { PaeServiceService } from '../pae-service.service'; 
import { Icandidat } from './icandidat'; 
import { NgModel } from '@angular/forms/src/directives'; 
import { Component, OnInit } from '@angular/core'; 


@Component({ 
    selector: 'app-candidat', 
    templateUrl: './candidat.component.html', 
    styleUrls: ['./candidat.component.css'], 
    providers : [PaeServiceService] 
}) 
export class CandidatComponent implements OnInit { 
    prog1 : string ="Programme d'Appui aux Elections"; 
    progName1 : string ="Enquête sur les candidats"; 
    progEl1 : string ="Listes des candidats ciblés"; 
    candInfo : any []; 
    filterBy : string ="Ronny"; 

    candidatID : number; 
    candidatNom : string; 
    canditatPrenom : string ; 
    candidatParti : string; 
    candidatDepartement : string; 
    candidatCommune : string ; 

    candidats : Icandidat; 
    errorMessage : string; 

    constructor (private _candidatService : PaeServiceService){ 

    } 

    ngOnInit(): void { 
     this._candidatService.getCandidatInfo() 
      .subscribe(candidats => this.candInfo = candidats, 
      error => this.errorMessage = <any>error); 
    } 


} 

und meine Vorlage

<table class="bordered highlight" *ngIf='candInfo && candInfo.length'> 
       <thead> 
        <tr > 
         <th>Nom</th> 
         <th>Prénom</th> 
         <th>Parti Politique</th> 
         <th>Département</th> 
         <th>Commune</th> 
        </tr> 
       </thead> 

       <tbody> 
        <tr *ngFor = 'let candidats of candInfo | personFilter : filterBy'> 
        <td>{{candidats.nom}}</td> 
        <td>{{candidats.prenom}}</td> 
        <td>{{candidats.parti}}</td> 
        <td>{{candidats.departement}}</td> 
        <td>{{candidats.commune}}</td> 
        </tr> 

       </tbody> 
      </table> 

Jede Idee von dem, was ist der Grund dafür?

+0

Klarerweise ist 'person.candidatNom' an derselben Stelle undefiniert. Sie können so etwas tun: '... person.candidatNom && person.candidatNom.toLocaleLowerCase() ...'. – developer033

+0

Es wird diesen Fehler los, aber meine Liste filtert nicht, es gibt nur ein leeres Ergebnis zurück, wenn ich eine Abfrage critera gebe – Geeksan

+0

Kann nichts sagen, da ich Ihre Datenstruktur nicht kenne. – developer033

Antwort

1

Der Abstand kann hier das Problem sein:

.indexOf(filterBy) ! ==-1) 

Es sollte:

.indexOf(filterBy) !== -1) 

Beachten Sie, dass es keine Leerzeichen zwischen den Knall und die Doppel Gleichen.

+0

es filtert immer noch nicht meine Liste – Geeksan

+1

Es ist erwähnenswert, dass die Antwort für die ** ursprüngliche Frage ** in etwa so lautet: "* Clearly' person.candidatNom 'ist an der gleichen Stelle undefiniert. Sie können etwas wie folgt tun:' ... person.candidatNom && person.candidatNom.toLocaleLowerCase() ... '." *. Dieses Problem mit "Leerzeichen" soll eine zusätzliche Frage in Kommentaren beantworten. – developer033

+0

Ja. Es gibt tatsächlich zwei Probleme: (1) Die! == Syntax war falsch, daher ist die obige Änderung erforderlich. (2) Das 'person.candidatNom' könnte null sein, was den im Posttitel genannten Fehler verursacht. Beide Änderungen sind erforderlich. – DeborahK

Verwandte Themen