web-dev-qa-db-fra.com

Essayer de remplacer les espaces par des tirets en utilisant ng-model

Je suis nouveau sur AngularJS et j'essaie de créer une application simple qui me permettra de télécharger des fichiers sur mon site Web piloté par Laravel. Je veux que le formulaire me montre l'aperçu de ce que l'élément téléchargé sera Donc, j'utilise ng-model pour y parvenir et je suis tombé sur ce qui suit:

J'ai une entrée avec quelques styles de base bootstrap et j'utilise des supports personnalisés pour les modèles AngularJS (car comme je l'ai mentionné, j'utilise Laravel avec son système de lame) Et je dois supprimer les espaces de l'entrée (au fur et à mesure que je les tape) et les remplacer par des tirets:

<div class="form-group"><input type="text" plaeholder="Title" name="title" class="form-control" ng-model="gnTitle" /></div>

Et puis j'ai ceci:

<a ng-href="/art/[[gnTitle | spaceless]]" target="_blank">[[gnTitle | lowercase]]</a>

Et mon app.js ressemble à ceci:

var app = angular.module('neoperdition',[]);

app.config(function($interpolateProvider){
    $interpolateProvider.startSymbol('[[').endSymbol(']]');
});

app.filter('spaceless',function(){
    return function(input){
        input.replace(' ','-');
    }
});

J'obtiens l'erreur suivante: TypeError: Impossible de lire la propriété 'replace' de undefined

Je comprends que je dois définir la valeur avant de la filtrer, mais je ne sais pas où la définir exactement. Et aussi, si je le définis, je ne veux pas qu'il change mon espace réservé.

12
Bravi

Il manque peu de choses dans votre filtre. Tout d'abord, vous devez renvoyer une nouvelle chaîne. L'expression secondaire secondaire n'est pas correcte, vous devez utiliser le modificateur global afin de remplacer tous les caractères d'espace. Enfin, vous devez également vérifier si la chaîne est définie, car la valeur initiale du modèle peut être undefined, donc .replace on undefined générera une erreur.

Tous ensemble:

app.filter('spaceless',function() {
    return function(input) {
        if (input) {
            return input.replace(/\s+/g, '-');    
        }
    }
});

Démo: http://plnkr.co/edit/5Rd1SLjvNI18MDpSEP0a?p=preview

17
dfsq

Bravi, essayez ce filtre par exemple {{X | replaceSpaceToDash}}

 app.filter('replaceSpaceToDash', function(){
                var replaceSpaceToDash= function( input ){

                        var words = input.split( ' ' );
                         for ( var i = 0, len = words.length; i < len; i++ )
                             words[i] = words[i].charAt( 0 ) + words[i].slice( 1 );
                         return words.join( '-' );
                     };
                     return replaceSpaceToDash;
            });
1
Pradip Wawge