自定义过滤器后更新数组对象

时间:2018-03-21 13:48:04

标签: javascript angularjs angularjs-directive angularjs-scope

我有一个自定义过滤器,我用它来聚合在ng-repeat块中使用的$ scope对象。 我的代码看起来像这样:

  $scope.myobj = isSelected ? $filter('customFilter')($scope.origObj) : $scope.origObj

与上面的代码一样,$scope.myobj是我在ng-repeat中使用的,所以如果isselected标志为true,原始对象将被过滤并返回$scope.myobj,否则我们只是按原样返回原始对象。 但是,我对过滤后的数组中的任何对象所做的任何更改都不会在原始数组中更新,这是可以理解的,因为它们是不同的对象。

如果过滤器未处于活动状态,如何确保这些更改反映在原始数组中? 我有一个解决方法是更新后更新视图(服务器请求),但我想知道是否有更好的方法,因为我只想更新我正在编辑的当前行而不是完全刷新。

1 个答案:

答案 0 :(得分:0)

更好的方法是创建一个自定义过滤器,它将接受一个参数并在ng-repeat中使用它。

.filter('myFilter', function(){
return function(inputArr, isSelected){
    var outputArr = [];
    if(isSelected){
        outputArr = inputArr.filter(function(obj){return obj.active === true});
    }
    else{
        outputArr = inputArr;
    }
    return outputArr;
}
})

工作JSFiddle link。希望这有帮助!