2017-05-28 2 views
0

J'essaye d'écrire un tuyau qui imprime le first word dans une chaîne. Voici mon code erroné qui imprime de façon indésirable le first letter d'une chaîne.Obtenez le premier mot d'une chaîne en Angulaire en utilisant un tuyau?

Par exemple.

PIPE

import { Pipe, PipeTransform } from '@angular/core'; 

@Pipe({ 
    name: 'firstWord' 
}) 
export class GetFirstWord implements PipeTransform 
{ 
    transform(value: string, args: any[]): string | boolean 
    { 
     if (value === null) {return false;} 
     const firstWords = []; 
     for (let i = 0; i < value.length; i++) 
     { 
      const words = value[i].split(' '); 
      firstWords.push(words[0]); 
     } 
     return firstWords[0]; 
    } 
} 

COMPONENT

userName: string = 'Chuck Norris'; 

TEMPLATE

{{ userName | firstWord }} 

OUTPUT

C

DESIRED OUTPUT

Chuck

Répondre

3

Vous n'avez pas besoin d'une boucle

transform(value: string, args: any[]): string | boolean 
    { 
     if (value === null) {return false;} 
     return value.split(' ')[0]; 
    } 
+0

Pas question que je aurais pu manquer quelque chose d'aussi simple que cela. Merci beaucoup. – anonym

+0

@Yury. vous avez déprimé. Je peux le voir comme tu as perdu 2 points. !! une raison spécifique pour downvoting? – Aravind

+1

@Aravind Je n'ai pas Sherlock :) Si c'était moi j'avais perdu 1 point LOL. Et je commente toujours quand downvote (juste ma règle personnelle). Quelqu'un a également rabaissé ma réponse –

1

Vous pouvez utiliser cette façon

transform(input:string):string{ 

    return input.split(' ')[0]; 
    } 

LIVE DEMO

+0

C'est correct! Merci, Aravind. – anonym

+0

@ downvoters osent commenter .. – Aravind

+0

@anonyme heureux de vous aider. – Aravind

4

C'est parce que votre boucle passe sur les caractères de la chaîne. Vous devriez diviser l'ensemble de l'entrée à la place et obtenir la première occurrence.

@Pipe({ 
    name: 'firstWord' 
}) 
export class GetFirstWord implements PipeTransform 
{ 
    transform(value: string, args: any[]): string | boolean 
    { 
     if (value == null) { 
      return value; 
     } 
     const words = value.split(' '); 
     return words.length > 0 ? words[0] : value; 
    } 
} 
+0

Merci, c'est la bonne solution. – anonym

+0

Je suis heureux de vous aider. :) En passant, je vous suggère de revenir avec des chaînes uniquement dans les tuyaux sinon vous pouvez voir quelque chose d'intéressant lorsque vous souhaitez déboguer votre code. ;) –

+0

Merci. Je m'en souviendrai. – anonym

0
transform(value: string): string | boolean { 
    if (value) { 
     return value.split(' ')[0]; 
    } 
    return false; 
    }