Javascript I';I’我想根据用户在文本框中输入的内容过滤列表。I';我在用angularJS。为什么不是';代码不起作用吗?

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"

我尝试创建我自己的名为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">
        </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 = "";
}