模板
<ul>
<li ng-repeat="object in objects">{{object.id}}</li>
</ul>
控制器
function Controller($scope, ObjectFilter) {
$scope.objects = [{id: 1}, {id: 2}, {id: 3}];
var ids = [1, 3];
$scope.objects = ObjectFilter($scope.objects, ids);
}
过滤
function ObjectFilter(objects, ids) {
var out = [];
for(i=0; i<ids.length; i++) {
for(j=0; j<objects.length; j++) {
if(objects[j].id === ids[i]) {
out.push(objects[j]);
}
}
}
return out;
}
$ scope.objects被过滤但模板没有更新
如果我尝试$scope.$apply()
,我会收到一个错误,即$ apply已经在进行中。
这应该不起作用吗?为什么不呢?!
编辑:所以这个简化的示例似乎有效,但不是我的实际代码!
编辑:我通过组合两个控制器让它工作。感谢您的投入,帮助我找出问题所在的位置!
答案 0 :(得分:2)
小提琴:https://jsfiddle.net/9gb3s7yk/
您忘记声明循环变量:var txnfilterbox = function(table, tabID)
{
if (table)
{
var filtervalue = $('#filterText').val();
if((filtervalue != undefined)&&(filtervalue.length > 0))
{
var tableData = table.fnSettings().aoData;
for (var index = 0; index < tableData.length; index++)
{
var rowData = tableData[index]._aData;
if (filtervalue === rowData.id)
{
rowData.show();
}
else
{
rowData.hide();
}
}
}
}
};
,var i
var j
答案 1 :(得分:2)
尝试仅定义这样的$ scope:
for(var i = 0; i < idCollection.length; i++) {
for(var j = 0; j < objs.length; j++) {
if(objs[j].id === idCollection[i]) {
out.push(objs[j]);
}
}
}
答案 2 :(得分:1)
完美的作品!只需将“OjectFilter”更改为“ObjectFilter”
即可