我已经创建了一个JSFiddle我遇到的问题:
http://jsfiddle.net/9qxFK/4/
我有一个输入字段,我只想允许小写字母,数字和连字符(此字段将用于URL).
我有以下angular.js控制器方法,以便执行此操作:
$scope.auto_slug = function() { $scope.slug = $scope.slug.toLowerCase().replace(/[^a-z0-9\-\s]/g,'').replace(/\s+/g,'-'); };
只有在无效字符后键入有效字符时才会删除无效字符.
任何人都可以告诉我为什么这不起作用?
谢谢,斯科特
解决方法
而不是在控制器上执行此操作,您应该使用这样的指令:
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'),'-')); }); } } });
然后在你的输入上使用它,如下所示:
<input restrict="[^a-z0-9\-\s]" data-ng-model="slug" ...>
jsFiddle:http://jsfiddle.net/9qxFK/5/