{{ myDateInScope | date: 'yyyy-MM-dd' }}
Run Code Online (Sandbox Code Playgroud)
这里date是一个带有一个参数的过滤器.
从模板和JavaScript代码调用带有更多参数的过滤器的语法是什么?
是否可以过滤对象数组,以便属性值可以是几个值(OR条件),而无需编写自定义过滤器
这类似于这个问题 - Angular.js ng-repeat:按单个字段过滤
而不是
<div ng-repeat="product in products | filter: { color: 'red' }">
Run Code Online (Sandbox Code Playgroud)
有可能做这样的事情
<div ng-repeat="product in products | filter: { color: 'red'||'blue' }">
Run Code Online (Sandbox Code Playgroud)
如下样本数据─
$scope.products = [
{ id: 1, name: 'test', color: 'red' },
{ id: 2, name: 'bob', color: 'blue' }
/*... etc... */
];
Run Code Online (Sandbox Code Playgroud)
我没试过
<div ng-repeat="product in products | filter: { color: ('red'||'blue') }">
Run Code Online (Sandbox Code Playgroud) 给定一个过滤器方法,如果满足某些条件则返回true,是否可以在HTML中调用其相反的方法,例如使用:
"item in items | filter:!AllDay"
Run Code Online (Sandbox Code Playgroud)
代替
"item in items | filter:AllDay"
Run Code Online (Sandbox Code Playgroud)
?或者你必须维护两个单独的过滤方法(一个用于假,一个用于真)?
我已经做了一些google-fu但是我能找到的关于AngularJS过滤器的所有内容都是关于简单过滤器的简单示例(主要是关于单个字段的值).
我之后的事情有点复杂,我在寻求如何解决我的情况的帮助.
想象一下,你有一个以下JSON对象的数组:
{
"id":"1",
"title":"Title",
"categories":[
{"id":"14","name":"DIY"}
],
"topics":[
{"id":"12","name":"Junk Food"}
]
},
{
"id":"2",
"title":"Title 2",
"categories":[
{"id":"4","name":"Test"},
{"id":"14","name":"DIY"},
],
"topics":[
{"id":"2","name":"Food"}
]
}
[...]
Run Code Online (Sandbox Code Playgroud)
所以基本上每个对象可以有任意数量的"类别"和/或"主题".
现在,我的目标是创建一个前端界面,允许我累积地将各种过滤器应用于这些JSON对象.
例如,我想说:只显示具有category.id = 14 AND topic.id = 2 [etc]的条目,并且仍然支持过滤结果的深层链接.
所以这就是我被困的地方:
1)为此使用路由的最佳方法是什么(即如何构建URL以支持任意数量的过滤器(基于不同的值)
2)我应该如何跟踪添加的过滤器?(即,用户选择了多少和哪些过滤器)
查看AngularJS过滤器的文档,我显然会将第二个示例用于过滤参数:
对象:模式对象可用于过滤数组包含的对象的特定属性.例如{name:"M",phone:"1"}谓词将返回一个项目数组,其属性名称包含"M",属性手机包含"1".可以使用特殊属性名称$(如{$:"text"})来接受对象的任何属性的匹配.这相当于如上所述与字符串匹配的简单子字符串.
但我不确定如何确保我正在检查正确的字段(即topic.id主题与category.id类别)...
简而言之,我很想看到这样一个不那么简单的过滤场景的例子.
我想将自定义过滤器与ngRepeat指令一起使用.这就是我所拥有的
HTML:
<div ng-app="menuApp">
<ul ng-controller="MenuCtrl">
<li ng-repeat="item in menuItems | rootCategories">
{{item.Name}}
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
angular.module('menuApp', [])
.filter('rootCategories', function() {
return function(item) {
return item.Parent == 0;
};
});
function MenuCtrl($scope) {
$scope.menuItems = [{ "Id": 1, "Name": "Sweep", "Parent": 0 }];
/*
$scope.rootCategories = function(item) {
return item.Parent == 0;
};
*/
};
Run Code Online (Sandbox Code Playgroud)
我不想使用注释掉的方式来过滤我的项目,因为真正的过滤器将比提供的示例复杂.由于某些原因,输入参数"item"未定义,因此我什么也看不见.你能告诉我有什么问题吗?谢谢.