过滤范围后,角度模板不会更新

时间:2016-04-26 14:51:35

标签: angularjs

模板

<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已经在进行中。

这应该不起作用吗?为什么不呢?!

编辑:所以这个简化的示例似乎有效,但不是我的实际代码!

编辑:我通过组合两个控制器让它工作。感谢您的投入,帮助我找出问题所在的位置!

3 个答案:

答案 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”

即可