2014-02-07 130 views
0

我有3個過濾器我需要爲一個項目編寫,他們所有3人做同樣的事情,但與$ rootScope不同的數組(他們正在將數字狀態轉換爲顯示值)。添加公共代碼到一個角度過濾器模塊

我該如何編寫這段代碼,並從所有3個過濾器中調用它,並將這個實例保存在myFilters模塊中?

我沒有看到我可以放置該代碼的地方。如果我正在編寫一個服務,我會有一個可以放入的塊,但是使用過濾器,我沒有那個共同點來編寫代碼。

現在我剛把它移到了全局範圍,但我想將它移動到過濾器模塊中,所以我不必重複它3次,或將它存儲在全局範圍內。

angular.module('myFilters', []) 
.filter('aStatus', function($rootScope) { 
    return function(id, attr) { 
     var objectArray = $rootScope.appConfig.aStatuses, 
      index = _.findIndex(objectArray, function(obj) { return obj.id === id; }); 
     if(index < 0) { 
      return ""; 
     } 
     if(attr) { 
      return objectArray[index][attr]; 
     } 
     return objectArray[index]; 
    }; 
}) 
.filter('bStatus', function($rootScope) { 
    return function(id, attr) { 
     var objectArray = $rootScope.appConfig.aStatuses, 
      index = _.findIndex(objectArray, function(obj) { return obj.id === id; }); 
     if(index < 0) { 
      return ""; 
     } 
     if(attr) { 
      return objectArray[index][attr]; 
     } 
     return objectArray[index]; 
    }; 
}) 
.filter('cStatus', function($rootScope) { 
    return function(id, attr) { 
     var objectArray = $rootScope.appConfig.cStatuses, 
      index = _.findIndex(objectArray, function(obj) { return obj.id === id; }); 
     if(index < 0) { 
      return ""; 
     } 
     if(attr) { 
      return objectArray[index][attr]; 
     } 
     return objectArray[index]; 
    }; 
}); 
+0

你爲什麼不希望只創建一個過濾器,並通過你想要到一個數組作爲參數? –

回答

1

爲什麼不來提取通用功能分爲服務和剛剛與預先綁定的objectArray把它從過濾器?

angular.module('myFilters', []) 
.factory("StatusFilter", function ($rootScope) { 
    return function(objectArray, id, attr) { 
     var index = _.findIndex(objectArray, function(obj) { return obj.id === id; }); 
     if(index < 0) { 
      return ""; 
     } 
     if(attr) { 
      return objectArray[index][attr]; 
     } 
     return objectArray[index]; 
    }; 
}); 
.filter('aStatus', function(StatusFilter, $rootScope) { 
    return function(id, attr) { 
     return StatusFilter($rootScope.appConfig.aStatuses, id, attr); 
    }; 
}) 
.filter('bStatus', function(StatusFilter, $rootScope) { 
    return function(id, attr) { 
     return StatusFilter($rootScope.appConfig.bStatuses, id, attr); 
    }; 
}) 
.filter('cStatus', function(StatusFilter, $rootScope) { 
    return function(id, attr) { 
     return StatusFilter($rootScope.appConfig.cStatuses, id, attr); 
    }; 
}) 

或者,你可以提取功能分爲過濾:

angular.module('myFilters', []) 
.filter("Status", function ($rootScope) { 
    return function(objectArray, id, attr) { 
     var index = _.findIndex(objectArray, function(obj) { return obj.id === id; }); 
     if(index < 0) { 
      return ""; 
     } 
     if(attr) { 
      return objectArray[index][attr]; 
     } 
     return objectArray[index]; 
    }; 
}); 
.filter('aStatus', function($filter, $rootScope) { 
    return function(id, attr) { 
     return $filter("Status")($rootScope.appConfig.aStatuses, id, attr); 
    }; 
}) 
.filter('bStatus', function($filter, $rootScope) { 
    return function(id, attr) { 
     return $filter("Status")($rootScope.appConfig.bStatuses, id, attr); 
    }; 
}) 
.filter('cStatus', function($filter, $rootScope) { 
    return function(id, attr) { 
     return $filter("Status")($rootScope.appConfig.cStatuses, id, attr); 
    }; 
})