2014-02-07 2 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

왜 당신은 단지 하나의 필터를 생성하고 매개 변수로 당신이 그것으로 원하는 배열을 전달하려는 해달라고 :

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); }; }) 

또는, 필터에 해당 기능을 추출 할 수 있습니다? –

답변

1

제네릭 기능을 서비스로 추출하지 말고 사전 차단 objectArray으로 필터에서 호출하면 어떨까요?

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); 
    }; 
})