2016-08-23 121 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