Angularjs ng重复筛选器空值未显示
为什么应用时角度值不显示为空值:Angularjs ng重复筛选器空值未显示,angularjs,filter,null,ng-repeat,Angularjs,Filter,Null,Ng Repeat,为什么应用时角度值不显示为空值: ng-repeat="p in foo | filter: filter2" 过滤器2在哪里 $scope.filter2 = function(p){ if (p.state === null){ return p.state; } else{ return; } }; 下面是一个plnkr,我要说的是: 当它不是空的时候,过滤器工作,但是我尝试只显示空的。我可以尝试将所有空值更改为默认值字符串,而
ng-repeat="p in foo | filter: filter2"
过滤器2在哪里
$scope.filter2 = function(p){
if (p.state === null){
return p.state;
} else{
return;
}
};
下面是一个plnkr,我要说的是:
当它不是空的时候,过滤器工作,但是我尝试只显示空的。我可以尝试将所有空值更改为默认值字符串,而不是空值?是否有任何地方可以让过滤器使用空值?我认为唯一的错误是需要返回整个对象 根据Brad在下面的评论,我去查看了文档,他是对的。我的代码示例工作的唯一原因是它返回了一个“truthy”值 为了考虑到这一点,我修改了下面的代码示例 以下是过滤器:
$scope.filter2 = function(p){
if (p.state === null){
return true;
} else{
return;
}
};
以下是文档中的相关部分:
函数(实际值、预期值):将为函数提供要比较的对象值和谓词值,如果该项应包含在筛选结果中,则该函数应返回true
|筛选器:{expression}
需要的是true
或false
求值,而不是对象。因此:
$scope.filter1 = function(p){
return (p.state === 'on');
};
$scope.filter2 = function(p){
return (p.state === null);
};
您可以筛选空项,而无需编写自定义筛选器 使用plunk中的代码,将返回空项:
<ul ng-repeat="p in foo | filter:{state:'!'}" >
<li>{{p.name}}</li>
</ul>
<ul ng-repeat="p in foo | filter:{state:'!!'}" >
<li>{{p.name}}</li>
</ul>
- {{p.name}}
相反,这将返回所有非空项:
<ul ng-repeat="p in foo | filter:{state:'!'}" >
<li>{{p.name}}</li>
</ul>
<ul ng-repeat="p in foo | filter:{state:'!!'}" >
<li>{{p.name}}</li>
</ul>
- {{p.name}}
双not运算符将任何值转换为布尔值:第一个not运算符
将真值转换为布尔值false
,第二个值将布尔值反转回true
。在我的测试中,过滤器实际上只通过使用状态来工作:'
,但我会使用代码>为了安全起见…您可以在表达式中测试Null,如下所示:
ng-repeat="p in foo | filter:{state:null}"
你也可以这样做
<ul ng-repeat="p in foo" >
<li ng-if = "p.states">{{p.name}}</li>
</ul>
- {{p.name}
哈哈,我知道你做了什么。您返回了p而不是p.state。如果行得通的话。。。在javascript中不能返回空值吗?我想你可以。你可以,但也许ng repeat不喜欢不同的解决方案: