内容更改后更新智能表

时间:2015-11-04 16:33:13

标签: smart-table

我有一个对象数组,我使用st-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",视图也不会被更新。有时不会。

2 个答案:

答案 0 :(得分: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并查看每次重做过滤的方式

答案 1 :(得分:1)

要刷新智能表,您可以根据需要添加或删除项目或使用新数组..所以只需重新创建数组

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