内容更改后更新智能 table

Update smart table after content changed

我有一个对象数组,我使用 st-table 指令显示它们。

我通过对象中某个字段的值过滤 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”有时不是,视图也不会更新。

找到适合您的解决方案,而不是使用 st-search,而是使用普通的 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,看看每次都重做过滤

要刷新智能-table,您可以添加或删除您知道的项目或使用新数组..所以只需重新创建数组.

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