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