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

基本的に、デフォルトで Twitter のブートストラップと 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 に答える
0

フィルター処理された結果を保持するための var を使用して、この $watch を作成したので、それらをカウントできます。

$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;
});

これが正しい方法であるかどうか、ATM は本当にわかりませんが、うまくいきます。

于 2013-08-23T11:32:13.857 に答える