2017-10-14 1 views
0

내 filterProducts 함수는 findIntersection을 호출하지만 오류가 발생합니다. findIntersection은 정의되지 않습니다.Angularsjs에서 서비스 기능을 찾을 수 없습니다.

angular.module('BrandService', []) 
.service('BrandService', function ($filter, DataService) { 
    var productDb; 
    var products; 

    return { 
     filterProducts(brands, priceRange) { 
      var filteredProducts = []; 
      var brandProducts = []; 
      var priceProducts = []; 
      var productsArray = []; 

      var brandChecked = false; 
      var priceChecked = false; 

      angular.forEach(brands, function (brand) { 
       if (brand.checked) { 
        brandChecked = true; 

        angular.extend(brandProducts, 
         $filter('filter')(productDb, { 'brand': brand.name })); 
       } 

       if (brandChecked) { 
        productsArray.push(brandProducts); 
        console.log('brandProducts = ', brandProducts) 
       } 
      }); 

      angular.forEach(priceRange, function (price) { 
       if (price.checked) { 
        priceChecked = true; 

        let filteredProductDb = productDb.filter((prod) => { 
         return (prod.price >= price.low && prod.price <= price.high); 
        }); 
        angular.extend(priceProducts, filteredProductDb);  
       } 
      }); 

      if (priceChecked) { 
       productsArray.push(priceProducts); 
       // console.log('priceProducts = ', priceProducts) 
      } 

      if (!brandChecked && !priceChecked) { 
       filteredProducts = products; 
      } else { 
       if (productsArray.length > 1) { 
        filteredProducts = findIntersection(productsArray); 
       } else { 
        filteredProducts = productsArray[0]; 
       } 
      } 

      return filteredProducts; 
     }, 

     findIntersection(productsArray) { 
      console.log('findIntersection called') 
      var filteredProducts = []; 
      var filteredSet = new Set(); 

      for(var i=0; i < productsArray.length - 1; i++) { 
       var products1 = productsArray[i]; 
       var products2 = productsArray[i+1]; 

       angular.forEach(products1, function(product1) { 
        angular.forEach(products2, function(product2) { 
         if(product1._id == product2._id) { 
          filteredSet.add(product1); 
         } 
        }); 
       }); 
      } 

      filteredProducts = Array.from(filteredSet); 
      return filteredProducts; 
     }    
    }   
}) 

내 filterProducts 함수는 현재있는 findIntersection을 호출하지만 오류가 발생합니다. findIntersection은 정의되지 않습니다.

내 filterProducts 함수는 존재하는 findIntersection을 호출하지만 오류가 발생합니다. findIntersection은 정의되지 않습니다.

답변

1

속성이있는 javascript 객체를 반환하고 있습니다. 전역 함수를 정의하지 않습니다.

var service = { findProducts: ... , findIntersection: ... }; 
return service; 

대신 findIntersection를 호출, service.findIntersection를 호출하기 전에 서비스를 저장해야

이 돌아왔다.

0

로컬 개체에 대한 참조를 만들어야합니다.

간단하게 변경할 : filteredProducts = findIntersection(productsArray);

을 여기에 : filteredProducts = this.findIntersection(productsArray);

관련 문제