2013-04-25 2 views
0

У меня Tr:Добавление функции после завершения нг-шкуры

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

В Func() для item.status сравнивается со значением в раскрывающемся D, которые могут быть изменены пользователем в в любой момент.

У меня есть DIV, который мне нужно, чтобы показать, если текущее число видимого тра == 0. Я храню количество видимого тра как

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

Как я имею qVisible быть обновлены только как только все инструкции ng-hide были выполнены, чтобы получить правильный результат?

+0

Можете ли вы придумать способ, чтобы сделать это без запроса dom в вашем контроллере? – ganaraj

+0

Я должен просто подсчитать количество видимых строк. Худшее, что я могу думать, это то, что o вручную обновлять var каждый раз, когда func называется .. :(не очень хорошее решение –

ответ

2

я буду считать, что у вас есть выпадающий список, где-то, что выглядит как-то ..

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

Так что ваш нг скрытие может сделать что-то вроде

<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.

+0

Не так ли хорошо, как нужно вручную обновлять var? –

+0

Что вы подразумеваете под обновлением вручную var? – ganaraj

+0

@BhumiSinghal Я думаю, что то, что вы пытаетесь сделать, это «преждевременная оптимизация». Даже с учетом оптимизации .. запрос DOM медленный .. atleast намного медленнее, чем запуск маленького цикла. – ganaraj

1

Вы можете иметь $ часы, которые прослушивает такой же, как дата-нг-повтор выполняет ту же функцию, что и шкура:

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/