Javascript I';I’我想根据用户在文本框中输入的内容过滤列表。I';我在用angularJS。为什么不是';代码不起作用吗?
我尝试创建我自己的名为myFilter的过滤器,并尝试通过myFilter来传递person数组。我得到的输出是“输入名称:”后跟一个文本框。即使我试着写像A、B或C这样的字母,也不会显示任何东西Javascript I';I’我想根据用户在文本框中输入的内容过滤列表。I';我在用angularJS。为什么不是';代码不起作用吗?,javascript,html,angularjs,filter,html-lists,Javascript,Html,Angularjs,Filter,Html Lists,我尝试创建我自己的名为myFilter的过滤器,并尝试通过myFilter来传递person数组。我得到的输出是“输入名称:”后跟一个文本框。即使我试着写像A、B或C这样的字母,也不会显示任何东西 <!DOCTYPE html> <html> <head> <script src ="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"
<!DOCTYPE html>
<html>
<head>
<script src
="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js">
</script>
</head>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<p>Enter name: <input type="text" ng-model="test" /></p>
<ul>
<li ng-repeat="x in person | myFilter">
{{x}}
</li>
</ul>
</div>
<script>
var app = angular.module('myApp', []);
app.filter('myFilter', function()
{
return function(x, test)
{
var i, c=0;
for (i=0; i<test.length; i++)
{
if (x[i] == test[i])
{
c++;
}
}
if (c==test.length)
{
return x;
}
}
});
app.controller('myCtrl', function($scope)
{
$scope.person = ['Alex', 'Buddy',
'Bob', 'Aaron', 'Clay', 'Clayton'];
});
</script>
</body>
</html>
输入名称:
-
{{x}
var-app=angular.module('myApp',[]);
app.filter('myFilter',function()
{
返回函数(x,测试)
{
变量i,c=0;
对于(i=0;i,这里有几个问题
首先,您得到一个错误,因为test
未定义。这是因为您没有为值传入任何内容。您需要将值传入筛选器,如下所示:
<li ng-repeat="x in person | myFilter: test">
最后,过滤器中的逻辑也需要更改。x
的值将是一个名称数组。test
的值将是一个字符串。在执行操作时,如果(x[i]==test[i])
正在测试其中一个名称=
字符串中的一个字母
在下面的示例中,我要做的是检查名称是否以键入的名称开头,并删除任何不以键入的名称开头的名称
以下是一个工作示例:
var-app=angular.module('myApp',[]);
app.filter('myFilter',function(){
返回函数(x,测试){
变量i,c=0;
//设置默认值:
if(test==null){
test=“”;
}
返回x.filter(函数(名称){
返回name.indexOf(test)==0;
});
}
});
应用程序控制器('myCtrl',函数($scope){
$scope.person=['Alex','Buddy',
“鲍勃”,“亚伦”,“克莱”,“克莱顿”
];
});
输入名称:
-
{{x}
test
未定义导致出现错误。虽然这项功能工作正常,但是否有办法访问筛选器函数中x的数组元素的字符?是的,在x.filter
函数中使用array.from(name)
这将返回name
中的字符数组
if (test == null) {
test = "";
}