2015-11-04 6 views
1

У меня есть массив объектов, который я показываю с помощью директивы st-table.Обновление смарт-таблицы после изменения содержимого

Я фильтрую таблицу на значение определенного поля в объектах. Проблема заключается в том, что после изменения значения поля в этих объектах фильтрация не выполняется.

Я считаю, что причина этого в том, что smart-table наблюдает за длиной массива, но не выполняет глубокого сравнения, чтобы увидеть, изменились ли значения внутри любого из объектов.

Что делать, чтобы решить эту проблему?

изменения: добавлен код:

angular.module('myApp', ['smart-table']) 
    .controller('mainCtrl', ['$scope', '$timeout', 
    function ($scope, $timeout) { 

     $scope.rowCollection = [ 
     { 
      name: "sth odd", 
      number: 1 
     }, 
     { 
      name: "sth even", 
      number: 1 
     } 
     ]; 

     $scope.displayedCollection = [].concat($scope.rowCollection); 

     function changeNumber(){ 
      $timeout(function(){ 
      $scope.rowCollection[1].number = $scope.rowCollection[1].number === 1 ? 2 : 1; 
      changeNumber(); 
      }, 1000); 
     } 

     changeNumber(); 


    } 
]); 

http://plnkr.co/edit/IVYy5WrsiEJSRXZCqY9z?p=preview

Обратите внимание, как при поиске, например, число «2», то вид не обновляется, даже если свойство второго элемента иногда «2 «а иногда нет.

+0

Можете ли вы опубликовать код, воспроизводящий эту проблему? – svarog

+0

@svarog, добавленный код и рабочий образец – kihu

ответ

2

Нашли решение для вас, вместо использования st-search используйте plain ng-model, а затем отфильтруйте значение ng-model. затем в ng-repeat фильтре по этому значению

так вместо этого

<input st-search="number" placeholder="search for number" class="input-sm form-control" type="search"/> 
... 

<tr ng-repeat="row in displayedCollection"> 
    <td>{{row.name}}</td> 
    <td>{{row.number}}</td> 
</tr> 

сделать это

<input ng-model="searchMe" placeholder="search for number" class="input-sm form-control" type="search"/> 
.... 

<tr ng-repeat="row in filterd = (displayedCollection | filter: searchMe)"> 
    <td>{{row.name}}</td> 
    <td>{{row.number}}</td> 
</tr> 

вот plunker, введите 2 и посмотреть, как это Redos фильтровального каждый раз

0

Чтобы обновить смарт-таблицу, вы можете добавлять или удалять элементы, как вам известно, или использовать новый массив. Так что только воссоздайте массив.

$scope.rowCollection = [].concat($scope.rowCollection); 
Смежные вопросы