我有一个对象数组,我使用 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”有时不是, View 也不会更新。
最佳答案
为您找到了一个解决方案,不要使用 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,看看每次重做过滤的情况
关于smart-table - 内容更改后更新智能表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33527121/