2016-08-23 165 views
1

我有一个NG重复(玉):角度多重过滤器,第二个过滤器是空的?

.col-lg-4.col-md-4.col-sm-6.col-xs-12.product.product-grid(ng-repeat='item in collection | product_sex:filter_sex | product_stock:stockKind') 

在我app.js我有两个过滤器:

.filter('product_sex', function(){ 
    return function(input, sex){ 

     if(input == undefined){ 
      input = []; 
     } 
     var output = []; 

     if(sex == 'undefined' || sex =='all'){ 
      output = input; 
     } 

      for(var i =0; i < input.length; i++){ 
       var item = input[i]; 

       if (item.product.sex == sex){ 
        output.push(item); 
       } 
      } 


     return output; 
    } 
}) 
.filter('product_stock', function(){ 
    return function(input, stockKind){ 

     if(input == 'undefined'){ 
      input = []; 
     } 

     var output = []; 

     if (stockKind == 'undefined' || stockKind == 'all'){ 
      output = input; 
     } 

      for(var i=0; i< input.length; i++){ 
       var item = input[i]; 

       if(item.stock < 0 && item.status != 'Niet leverbaar' && stockKind == 'online'){ 
        output.push(item); 
       }else if(item.stock > 0 && item.status != 'Niet leverbaar' && stockKind =='fysiek'){ 
        output.push(item); 
       } 
      } 


    } 
}) 

我想这两个过滤器适用于我的NG-重复。第一个过滤器工作正常,但是当我添加第二个过滤器时(如示例中),它将不会返回任何内容。对于product_stock filter中的for循环,角度错误日志说TypeError: Cannot read property 'length' of undefined。我看不出我做错了什么,所以我想知道你能否再次帮助我?

在我的控制器中,我使用'all'填充$scope.stockKind$scope.filter_sex。后来我使人们有可能在点击链接时,像改变该值ng-click='stockKind="online"'

+0

调试你的代码,并检查你的'product_stock'过滤器中'input'的内容 – Weedoze

回答

2

你的错误是在代码的以下部分

if(input == 'undefined'){ 
    input = []; 
} 

你应该

if(input == null){ 
    input = []; 
} 
更换

OR

if(input === undefined || input === null){ 
    input = []; 
} 

两个是完全一样的

+0

你确定OP期望的是undefined的值,而不是字符串undefined吗? –

+0

此外'undefined'不是关键字。为了测试它,你最好使用下面的测试:'typeof ==='undefined''。见http://stackoverflow.com/a/3550319/1153988 –

+0

不知道,但他做了其他过滤器 – Weedoze