Javascript AngularJS ng通过对象和文本框中的一个属性重复筛选

Javascript AngularJS ng通过对象和文本框中的一个属性重复筛选,javascript,angularjs,filter,Javascript,Angularjs,Filter,我有这个问题,我想知道如何用最好的方法解决它。我需要用一个文本框过滤ng repeat结果,当hashtag被用作第一个符号时,我需要过滤器只在一个特定列上工作。例如: 默认情况下=仅通过插入搜索框中的文本进行筛选-含义 过滤器应适用于每个用户的所有属性 当用户输入Hashtag:value时,仅按一个属性进行筛选。 例如:(而不是用户在搜索框中插入的常规值) #身份证号码:33 将仅筛选id为33的用户 #date: 1/12/2014 #日期:2014年1月12日 wil仅筛选具有以下日期的

我有这个问题,我想知道如何用最好的方法解决它。我需要用一个文本框过滤ng repeat结果,当hashtag被用作第一个符号时,我需要过滤器只在一个特定列上工作。例如:

  • 默认情况下=仅通过插入搜索框中的文本进行筛选-含义 过滤器应适用于每个用户的所有属性
  • 当用户输入Hashtag:value时,仅按一个属性进行筛选。 例如:(而不是用户在搜索框中插入的常规值)

    #身份证号码:33 将仅筛选id为33的用户

    #date: 1/12/2014 #日期:2014年1月12日 wil仅筛选具有以下日期的用户

  • 变量用户=[{ “姓名”:“布鲁斯”, “城市”:“泰国”, “日期”:“2014年1月12日”, “id”:3376848 }, { “姓名”:“弗兰克”, “城市”:“孟加拉国”, “日期”:“2014年10月11日”, “id”:4482771 }, { “姓名”:“朱迪思”, “城市”:“菲律宾”, “日期”:“2015年9月13日”, “id”:4981921, }, { “姓名”:“伯爵”, “城市”:“乌克兰”, “日期”:“2015年6月21日”, “id”:4024523,
    }]; 您需要做的是观察作用域中的变量(我使用下面的“搜索”)

    当它以“#”开头时,只搜索该属性。如果不以“#”开头,则搜索所有属性

    我创建了一个名为“filteredUsers”的新数组,因为我们不想修改原始的“users”数组

    为了简化操作,我们使用Angular的filter服务(请记住在控制器中包含
    $filter

    var-app=angular.module(“app”,[])
    .controller(“controller”,函数($scope,$filter){
    变量用户=[{
    “姓名”:“布鲁斯”,
    “城市”:“泰国”,
    “日期”:“2014年1月12日”,
    “id”:3376848
    }, {
    “姓名”:“弗兰克”,
    “城市”:“孟加拉国”,
    “日期”:“2014年10月11日”,
    “id”:4482771
    }, {
    “姓名”:“朱迪思”,
    “城市”:“菲律宾”,
    “日期”:“2015年9月13日”,
    “id”:4981921,
    }, {
    “姓名”:“伯爵”,
    “城市”:“乌克兰”,
    “日期”:“2015年6月21日”,
    “id”:4024523,
    }];
    $scope.search=“”;
    $scope.filteredUsers=用户;
    $scope.$watch(“搜索”),函数(newVal,oldVal){
    //如果搜索值以“#”开头
    if(newVal.substring(0,1)==“#”){
    var searchProperty=newVal.substring(1,newVal.indexOf(“:”);//在“#”和第一个“:”之间的字符串
    var searchValue=$scope.search.substring(newVal.indexOf(“:”)+1.trim();//第一个“:”之后的字符串。如果没有“:”将抛出一些错误,但您可以自己检查
    //如果同时存在属性和值,则搜索单个属性
    if(searchProperty&&searchValue){
    //Angular的筛选服务需要一个对象(例如{name:“Bruce”}),但如果我们尝试{searchProperty:searchValue},它将筛选名为“searchProperty”的属性,而不是变量的值,因此我们创建一个新对象并使用它
    var searchObject={};
    searchObject[searchProperty]=searchValue;
    $scope.filteredUsers=$filter('filter')(用户,searchObject,false);
    }否则{
    //Else不显示用户。此处的操作取决于您。您可能希望在用户键入时显示所有用户
    $scope.filteredUsers=[];
    }
    }否则{
    //如果搜索值不是以“#”开头,则对搜索值使用筛选器将查看所有属性
    $scope.filteredUsers=$filter('filter')(用户,newVal,false);
    }
    });
    });
    
    pre{
    保证金:0;
    }
    
    搜索:
    使用者
    {{user | json}}
    
    #date: 1/12/2014 var users = [{ "name": "Bruce", "city": "Thailand", "date": "1/12/2014", "id": 3376848 }, { "name": "Frank", "city": "Bangladesh", "date": "11/10/2014", "id": 4482771 }, { "name": "Judith", "city": "Philippines", "date": "13/9/2015", "id": 4981921, }, { "name": "Earl", "city": "Ukraine", "date": "21/6/2015", "id": 4024523, }];