2

在通过父选择值过滤子选择对象时,我使用下面的代码得到了过滤器的结果。(过滤器基于范围变量 $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为真。

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

4

2 回答 2

0

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

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

然后我可以:

ng-show="filteredData.length"

但问题是过滤器会遍历所有对象道具,因此出现了错误的结果。为了确定过滤数据的内容,我必须在 $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,但它确实有效。

于 2013-08-23T11:32:13.857 回答
0

基本上你可以通过 twitter bootstrap 默认隐藏和 ng-show="myValue" 你可以写 $scope.myValue()=function}{ Do your logic here at controller get filter item... }

参考资料: https ://docs.angularjs.org/api/ng/directive/ngShow

类别中的标签 选择
于 2015-12-07T17:04:42.103 回答