【问题标题】:filter is not working inside angular controller过滤器在角度控制器内不起作用
【发布时间】:2016-07-09 19:13:25
【问题描述】:

我想使用角度控制器内的过滤器对象过滤对象列表。但它给了我过滤列表。它应该返回第二个对象。

这是我的代码示例

app.controller('MainCtrl', function($scope, $filter) {
  $scope.list=[
  {

    "job_id": 2,
    "description": "Bid for Job 2",
    "price": 115,
    "butler_id": 60,
    "butler_name": "Butler Client 1",
    "service_price": 500,
    "material_price": 900,
    "date_created": "23 Apr 1993"
  },
  {

    "job_id": 2,
    "description": "sfcs",
    "price": 555,
    "butler_id": 70,
    "butler_name": "Butler Client 2",
    "service_price": 666,
    "material_price": 666,
    "date_created": "23 Apr 1993"
  }
];

  $scope.filter ={"butler_name":"","service_price":"","material_price":"6","price":"","created_date":"","description":""};

 var getFiltered = $filter('filter')($scope.list, $scope.filter);
  $scope.filteredBids = getFiltered;

});

Plunker link

【问题讨论】:

  • 您想应用哪个过滤器?目前适用于几乎所有属性..
  • 你的 plunker 确实有效。例如:$scope.filter = {butler_name: 'Butler Client 1'};
  • 如您所见,在过滤器对象中,某些属性为空,因此如果属性为空,则过滤器不应应用于该属性
  • @mostruash: 不,我不想一个一个传递对象名称,我想将所有过滤器作为对象传递
  • $scope.filter = {butler_name: 'Butler Client 1', job_id: 2}; 也可以。你可以一起通过所有这些。您的问题可能是您想要链接 OR 过滤器属性,但 Angular 的过滤器链将它们与。

标签: javascript angularjs angularjs-filter


【解决方案1】:

您在过滤器中传递所有属性,而 Angular 考虑 AND,因此您没有得到任何结果。

您必须根据您的过滤器创建属性。

 var filterParams = {};
        if ($scope.filter.butler_name.trim() !== "") {
            filterParams.butler_name = $scope.filter.butler_name;
        }
        if ($scope.filter.service_price.trim() !== "") {
            filterParams.service_price = $scope.filter.service_price;
        }
        if ($scope.filter.material_price.trim() !== "") {
            filterParams.material_price = $scope.filter.material_price;
        }
        if ($scope.filter.price.trim() !== "") {
            filterParams.price = $scope.filter.price;
        }
        if ($scope.filter.created_date.trim() !== "") {
            filterParams.created_date = $scope.filter.created_date;
        }
        if ($scope.filter.description.trim() !== "") {
            filterParams.description = $scope.filter.description;
        }
        var getFiltered = $filter('filter')($scope.list, filterParams);
        $scope.filteredBids = getFiltered;

Updated link

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2015-08-17
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多