Angularjs 按指定属性中的文本筛选

Angularjs 按指定属性中的文本筛选,angularjs,Angularjs,我有一个对象数组,比如 { name: "task1", owner: "david", des: "task1 description" }, { name: "task2", owner: "Smith", des: "task2 description" }, { name: "task1", owner: "david", des: "task1 description" }, 还有一个选择和文本框 还有一张桌子,上面全是 我正在寻找一种方法来过滤表中的数据。 用户将从下拉列表中选择一

我有一个对象数组,比如

{ name: "task1", owner: "david", des: "task1 description" },
{ name: "task2", owner: "Smith", des: "task2 description" },
{ name: "task1", owner: "david", des: "task1 description" },
还有一个
选择
文本框
还有一张桌子,上面全是

我正在寻找一种方法来过滤表中的数据。 用户将从下拉列表中选择一个值,并在文本框中输入文本

然后,表格数据将通过下拉列表中选定值(对象属性)中的文本匹配项进行过滤

例如:

  • 从下拉列表中选择“名称”并在文本框中写入“任务”,将返回数组中的所有3项。文本字包含在所有3条记录中
  • 从下拉列表中选择“名称”并在文本框中写入“任务1”,将返回记录1和3
要进行筛选,文本框值将是必需的

可以用angularjs过滤器完成吗


在这一点上,编写自定义过滤器可能是最简单的。自定义过滤器非常简单明了,允许您控制应用过滤器的方式和时间的所有方面。这是一个适用于您的案例的工作示例—它不是非常健壮,因为如果您尝试过滤数值属性,它将崩溃,但它为您提供了要点和一些可以根据您的需要构建和自定义的内容

angular.module('myApp',[])
.controller('myCtrl',函数($scope){
$scope.cards=[{
名称:“任务1”,
主人:“大卫”,
des:“任务1说明”
},
{
名称:“任务2”,
主人:“史密斯”,
des:“任务2说明”
},
{
名称:“任务3”,
主人:“史密斯”,
des:“任务3说明”
},
{
名称:“任务4”,
所有者:“戴维斯”,
des:“任务4说明”
},
{
名称:“任务5”,
主人:“托马斯”,
des:“任务5说明”
},
{
名称:“任务6”,
主人:“大卫”,
des:“任务6说明”
}
];
})
.filter('myFilter',function(){
返回函数(项、属性、值){
//如果项目、属性或值在默认情况下丢失,则返回项目
如果(!items | |!property | |!value){
退货项目;
}
//创建一个数组来保存匹配的项
var out=[];
角度。forEach(项目、功能(项目){
//查看项目属性值是否包含所需的值
如果(项[property].toLowerCase().includes(值.toLowerCase())){
推出(项目);
}
});
//返回项目数组
返回;
}
});

过滤
名称
主人
des
名称
主人
描述
{{x.name}
{{x.owner}
{x.des}

您需要在
文本框上使用
ng disabled
属性

工作

Html需要更新

<input ng-model="filterdata[filterProperty]" type="text" ng-disabled="!filterProperty" />


过滤器文档页面上的演示几乎做到了这一点:。所以你的问题的答案是肯定的,这是可以做到的。我更新了我的plunker,我似乎无法让它工作-你能告诉我我做错了什么吗?+此外,我希望W过滤器只在文本框不为空时才打开,我如何实现它?你的plunker对我不起作用,我选择了“名称”输入文本“任务”,但什么也没有发生,当用户不从下拉列表中选择时,我该怎么做才能只按文本进行过滤?它对我很好。它显示所有任务,因为每个名称中都有“任务”一词!我做的这个小东西很简单,说明了我的问题。但在我拥有的真实应用程序中,如果我想使用自定义过滤器,我需要运行3个for循环,因为我不在表中显示数据,该应用程序与Github看板更相似-我需要使用1'st for循环来查找特定的板>然后查找特定的类别>和特定的卡。我认为@Gaurav将是快速解决问题的方法。谢谢