内容更改后更新智能 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);
我有一个对象数组,我使用 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);