Javascript AngularJS ng通过对象和文本框中的一个属性重复筛选
我有这个问题,我想知道如何用最好的方法解决它。我需要用一个文本框过滤ng repeat结果,当hashtag被用作第一个符号时,我需要过滤器只在一个特定列上工作。例如: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仅筛选具有以下日期的
}]; 您需要做的是观察作用域中的变量(我使用下面的“搜索”) 当它以“#”开头时,只搜索该属性。如果不以“#”开头,则搜索所有属性 我创建了一个名为“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,
}];