Angularjs 如果筛选结果为空,是否隐藏true?

Angularjs 如果筛选结果为空,是否隐藏true?,angularjs,angularjs-scope,Angularjs,Angularjs Scope,通过父选择值筛选子选择对象时,我使用下面的代码获得了预期的筛选结果。 (过滤器基于范围变量$scope.le_form.categories.id) 但我只想显示孩子选择,如果过滤器不是空的: <div ng-show="(labels|filter:labelFilter).length"> <label>Labels in categories</label> <select ng-options="l.label for l in

通过父选择值筛选子选择对象时,我使用下面的代码获得了预期的筛选结果。 (过滤器基于范围变量$scope.le_form.categories.id)

但我只想显示孩子选择,如果过滤器不是空的:

<div ng-show="(labels|filter:labelFilter).length">
    <label>Labels in categories</label>
    <select ng-options="l.label for l in labels | labelFilter: {cats: le_form.categories.id}" ng-model="le_form.product_labels_uid">
        <option value="" disabled>Select</option>
    </select>               
</div>

分类标签
挑选
所以,我的过滤器可以工作,但除非在其过滤器结果中找到父id,否则我不会显示为真


当然,您在ng show上看到的条件是有效的,但是如果过滤器没有返回结果,它不会隐藏div。我怎样才能做到这一点呢?

我写了这个$watch,其中包含一个var,用来保存过滤后的结果,这样我就可以计算它们了:

$scope.$watch("le_form.categories_uid.id", function(query){
    $scope.filteredData = $filter("filter")($scope.labels, query);
});
然后我可以:

ng show=“filteredData.length”

但问题是,过滤器通过了所有的对象道具,所以出现了错误的结果。 为了确定filteredData的内容,我必须将自定义筛选器的逻辑复制到$watch中:

$scope.$watch("le_form.categories_uid.id", function(query){
    var arr = [];
    $scope.filteredData = $filter("filter")($scope.labels, query);
    for (var i = 0; i < $scope.filteredData.length; i++) {
        if ($scope.filteredData[i].categories_uid == query) {
            arr.push($scope.filteredData[i]);
        }
    }
    $scope.filteredData = arr;
});
$scope.$watch(“leu-form.categories\u-uid.id”,函数(查询){
var-arr=[];
$scope.filteredata=$filter(“filter”)($scope.labels,查询);
对于(变量i=0;i<$scope.filteredData.length;i++){
if($scope.filteredData[i].categories\u uid==query){
arr.push($scope.filteredata[i]);
}
}
$scope.filteredData=arr;
});

我真的不知道这是不是正确的方法,但它是有效的。

基本上,默认情况下,您可以通过twitter引导和ng show=“myValue”隐藏 您可以编写$scope.myValue()=function}{ 在控制器上执行您的逻辑 获取筛选器项。。。 }

参考资料:

分类标签
这不管用吗
ng show=“(标签|过滤器:labelFilter).length>0”
尝试过,但没有任何结果