如果空过滤结果,则ng-hide为true?

时间:2013-08-23 10:31:34

标签: 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 labels | labelFilter: {cats: le_form.categories.id}" ng-model="le_form.product_labels_uid">
        <option value="" disabled>Select</option>
    </select>               
</div>

所以,我的过滤器有效,但我不认为 ng-show 是真的,除非在其过滤结果中找到父ID。

当然,您在ng-show上看到的那种情况有效,但如果过滤器没有返回任何结果,它将不会隐藏div。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

我用var创建了这个$ watch来保存过滤后的结果,所以我可以算一下:

$scope.$watch("le_form.categories_uid.id", function(query){
    $scope.filteredData = $filter("filter")($scope.labels, query);
});

然后我可以:

  

纳克放映= “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;
});

如果这是正确的方法,它真的不知道ATM,但它确实有用。

答案 1 :(得分:0)

基本上你可以默认通过twitter bootstrap隐藏和ng-show =“myValue” 你可以写$ scope.myValue()= function} { 在控制器上做你的逻辑 获取过滤项目... }

参考文献: https://docs.angularjs.org/api/ng/directive/ngShow

    类别中的标签              选择