2012-12-18 10 views
7

Ho creato una JSFiddle del problema che sto vivendo qui: http://jsfiddle.net/9qxFK/4/Angular.js - funzione di regolatore per filtrare i caratteri non validi da input non elimina i caratteri finché non viene immesso un char valida

Ho un campo di input che ho vuoi permettere solo lettere minuscole, numeri e trattini (questo campo sarà usato in un URL).

Ho il seguente metodo di controllo angular.js al fine di fare questo:

$scope.auto_slug = function() { 
    $scope.slug = $scope.slug.toLowerCase().replace(/[^a-z0-9\-\s]/g, '').replace(/\s+/g, '-'); 
}; 

I caratteri non validi vengono rimossi solo quando un carattere valido viene digitato dopo un carattere non valido.

Qualcuno può dirmi perché questo non funziona?

Grazie, Scott

risposta

16

Invece di fare che sul controller si dovrebbe utilizzare una direttiva come questa:

app.directive('restrict', function($parse) { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, iElement, iAttrs, controller) { 
      scope.$watch(iAttrs.ngModel, function(value) { 
       if (!value) { 
        return; 
       } 
       $parse(iAttrs.ngModel).assign(scope, value.toLowerCase().replace(new RegExp(iAttrs.restrict, 'g'), '').replace(/\s+/g, '-')); 
      }); 
     } 
    } 
});​ 

e poi usarlo sul tuo input come questo:

<input restrict="[^a-z0-9\-\s]" data-ng-model="slug" ...> 

jsFiddle: http://jsfiddle.net/9qxFK/5/

+0

Bello. Grazie! – Sc0ttyD

Problemi correlati