0

私は tr を持っています:

<tr  ng-hide="func(item.status)"  ng-repeat="item in itemArray" >
<td></td>
.
.
</tr>

Func() では、item.status が、ユーザーがいつでも変更できるドロップダウン D の値と比較されます。

表示されているtrの現在の数== 0の場合に表示する必要があるdivがあります。表示されているtrの数を次のように保存しています

$scope.qVisible =  $("#tableid tbody tr:visible").length;

正しい結果を得るために、すべての ng-hide ステートメントが実行された後にのみ qVisible を更新するにはどうすればよいですか?

4

2 に答える 2

2

..のようなドロップダウンがどこかにあると仮定します。

<select ng-model="selectedStatus" ng-options="status for status in statuses"></select>

だからあなたの ng-hide は次のようなことができます

<tr  ng-hide="item.status !== selectedStatus"  ng-repeat="item in itemArray" >
<td></td>
.
.
</tr>

コントローラーでは、selectedStatus でウォッチをセットアップする必要があります。

$scope.qVisible = false;

$scope.$watch("selectedStatus",function(newVal){
    //for loop over items.. counting the number of items that match selectedStatus
    // if count is 0, set a scope variable 
    $scope.qVisible = true;
});

あなたのhtmlで..

<div ng-show="qVisible">...</div>

これは、DOM に触れずに行う方法です。

于 2013-04-25T09:02:17.150 に答える
1

data-ng-repeat と同じようにリッスンする $watch を hide と同じ関数で実行することができます。

function update(newValue) {
    var i;
    $scope.numberOfShownItems = 0;

    for (i = 0; i < newValue.length; i += 1) {
        if ($scope.func(newValue[i])) {
            $scope.numberOfShownItems += 1;
        }
    }

    $scope.qVisible = !!$scope.numberOfShownItems;
}

$scope.items = [1,2,3,4,5,6];    

$scope.func = function (item) {
    if (item % 2 === 0) {
        return true;
    }

    return false;
}

$scope.$watch('items', update);

例: http://jsfiddle.net/EgZak/

于 2013-04-25T09:31:23.423 に答える