7

我已经创建了我在这里遇到的问题的 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, '-');
};

只有在无效字符之后键入有效字符时,才会删除无效字符。

谁能告诉我为什么这不起作用?

谢谢,斯科特

4

1 回答 1

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/

于 2012-12-18T13:36:50.157 回答