我创建了一个我在这里遇到的问题的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, '-');
};
只有在无效字符后输入有效字符时才会删除无效字符。
有人可以告诉我为什么这不起作用吗?
谢谢,斯科特
答案 0 :(得分:16)
而不是在控制器上执行此操作,您应该使用这样的指令:
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, '-'));
});
}
}
});
然后在你的input
上使用它:
<input restrict="[^a-z0-9\-\s]" data-ng-model="slug" ...>
jsFiddle:http://jsfiddle.net/9qxFK/5/