Angular过滤器,用于在应用过滤器之前从输入的单词中删除重音
Angular filter to remove accents from the word inputed before applying the filter
我使用以下过滤器从用户在输入字段中输入的单词中删除重音,然后在过滤器上使用生成的字符串。
.filter('removeAcentos', function(){
return function (source) {
var accent = [
/['300-'306]/g, /['340-'346]/g, // A, a
/['310-'313]/g, /['350-'353]/g, // E, e
/['314-'317]/g, /['354-'357]/g, // I, i
/['322-'330]/g, /['362-'370]/g, // O, o
/['331-'334]/g, /['371-'374]/g, // U, u
/['321]/g, /['361]/g, // N, n
/['307]/g, /['347]/g, // C, c
],
noaccent = ['A','a','E','e','I','i','O','o','U','u','N','n','C','c'];
for (var i = 0; i < accent.length; i++){
source = source.replace(accent[i], noaccent[i]);
}
return source;
};
})
视图中的代码是:
<input type="text" id="curso" name="curso" ng-model="ctrl.curso" validate>
<ul>
<li ng-repeat="curso in ctrl.arrayCursos | removeAcentos: ctrl.curso">
...
</li>
</ul>
然而,我得到错误"源是未定义的",我不明白为什么。我也不能在控制器中使用函数作为过滤器因为我将在更多控制器中使用它。我想找出我的代码中的错误在哪里。
ctrl.curso
是在用户进入页面时预定义的,所以我不理解'source is undefined'错误,因为ctrl.curso
总是被定义的。ctrl.curso
是通过$http请求获得的,以防它是相关的。
我以前使用|filter: ctrl.curso
,但知道我需要转换ctrl。光标移到不带重音的字符串,并根据该字符串过滤列表。
只是为了澄清,我正在寻找根据用户输入的单词过滤数组。但是,首先我想将这个单词转换为不带重音的字符串,然后应用过滤器本身。例如,如果用户输入单词"espcie",我希望根据字符串"especie"进行过滤。
您需要链接过滤器。首先,您需要删除用户输入中的重音:
search | removeAcentos
然后你想要根据这个新值过滤你的数组:
filter: (search | removeAcentos)
请注意括号,以确保过滤器以正确的顺序应用。
更新ng-repeat的结果:
<li ng-repeat="curso in ctrl.arrayCursos | filter: (search | removeAcentos)" />
{{ curso }}
</li>
链接到工作JSFiddle
只需添加支票:
.filter('removeAcentos', function(){
return function (source) {
if(!angular.isDefined(source)){ return; }
var accent = [
/['300-'306]/g, /['340-'346]/g, // A, a
/['310-'313]/g, /['350-'353]/g, // E, e
/['314-'317]/g, /['354-'357]/g, // I, i
/['322-'330]/g, /['362-'370]/g, // O, o
/['331-'334]/g, /['371-'374]/g, // U, u
/['321]/g, /['361]/g, // N, n
/['307]/g, /['347]/g, // C, c
],
noaccent = ['A','a','E','e','I','i','O','o','U','u','N','n','C','c'];
for (var i = 0; i < accent.length; i++){
source = source.replace(accent[i], noaccent[i]);
}
return source;
};
})
您没有正确使用过滤器。
如果你要过滤集合-对集合使用过滤器并返回新集合,其中属性将被过滤掉重音
如果你想用filter来显示,不要把filter应用到ng-repeat上,把它应用到你的其他绑定上,也就是你的新html:
<li ng-repeat="curso in ctrl.arrayCursos ">
{{ ctrl.curso | removeAcentos }}
</li>
相关文章:
- 角度过滤器可以工作,但将输入视为未定义并抛出错误
- AngularJS自定义过滤器调用了两次,并在第二次调用时删除输入数据
- Vue js 在输入字段中对 v-model 应用过滤器
- EmberJS:将输入值绑定到控制器属性,并在更改时运行过滤器
- 轻量级 Javascript 表过滤器,以最少的字符输入显示结果
- Angularjs:在用户输入后更新过滤器
- 如何使用 Angular “数字”过滤器键入时在输入字段中设置带有千和小数分隔符的字符串格式
- 将焦点设置为 jQuery UI 多选控件中的过滤器输入
- 输入过滤器
- 为什么过滤器在角度的输入字段中不起作用
- 角度自定义指令基本输入过滤器工作不正常,只显示匹配的第一个实例
- jQuery过滤器通过文本输入选择选项
- AngularJS过滤器使用多个输入
- Ng-options过滤器等于输入的ng-model
- jQuery输入过滤器的textarea
- Jquery tablesorter:选择外部过滤器而不是输入
- 我可以把angularjs的透光过滤器从输入框改为选择框吗?
- 如何让AngularJS自定义过滤器处理用户输入?
- Extjs删除输入数字占位符从网格上的数字过滤器
- jQuery自动分压器直到在过滤器框中输入内容才加载