Angularjs 尝试使用ng模型将空格替换为破折号

Angularjs 尝试使用ng模型将空格替换为破折号,angularjs,angularjs-filter,angular-ngmodel,Angularjs,Angularjs Filter,Angular Ngmodel,我是AngularJS的新手,尝试创建一个简单的应用程序,允许我上传文件到我的Laravel驱动的网站。我希望表单显示上传项目的预览。因此,我使用ng模型来实现这一点,我偶然发现了以下几点: 我有一些基本的引导样式的输入,并且我正在使用定制的括号作为AngularJS模板(因为正如我提到的,我正在使用Laravel及其刀片系统)。我需要从输入中删除空格(键入时),并将其替换为破折号: <div class="form-group"><input type="text" plae

我是AngularJS的新手,尝试创建一个简单的应用程序,允许我上传文件到我的Laravel驱动的网站。我希望表单显示上传项目的预览。因此,我使用ng模型来实现这一点,我偶然发现了以下几点:

我有一些基本的引导样式的输入,并且我正在使用定制的括号作为AngularJS模板(因为正如我提到的,我正在使用Laravel及其刀片系统)。我需要从输入中删除空格(键入时),并将其替换为破折号:

<div class="form-group"><input type="text" plaeholder="Title" name="title" class="form-control" ng-model="gnTitle" /></div>
我得到以下错误: TypeError:无法读取未定义的属性“replace”

我知道我需要在筛选之前定义值,但我不确定确切地在哪里定义它。而且,如果我定义它,我不希望它改变我的占位符

首先,您必须将过滤器的名称添加到数组中,从而将其插入模块中:

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

其次,过滤器的功能必须返回某些内容。字符串为.prototype.replace()。因此,您必须退回:

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

编辑:dfsq的答案比我的答案准确得多。

您的过滤器中缺少的东西很少。首先,您需要返回新字符串。第二,正则表达式不正确,应使用全局修饰符替换所有空格字符。最后,您还需要检查字符串是否已定义,因为最初模型值可以是
未定义的
,因此
。如果未定义,则替换将抛出错误

总而言之:

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

演示:布拉维,试试这个过滤器 例如{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;
            });
app.filter('replaceSpaceToDash',function(){
var replaceSpaceToDash=函数(输入){
变量字=输入。拆分(“”);
for(var i=0,len=words.length;i
欢迎来到Stackoverflow!标题中不需要标签。请阅读更多信息。你确定吗?我想我只能在那里注入其他模块,而不能注入过滤器。加上我现在得到了一个新的错误,“无空间”不是一个模块…不,你是对的。dfsq的回答更加准确和精确。
app.filter('spaceless',function() {
    return function(input) {
        if (input) {
            return input.replace(/\s+/g, '-');    
        }
    }
});
 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;
            });