2014-10-08 4 views
0

필터링 할 수있는 목록에 데이터를 표시하는 웹 사이트가 있습니다. 필터가 적용될 때 매개 변수로 URL에 추가되고 싶습니다. 나는이에 대한 서비스를 작성했습니다 :데이터가 렌더링되지 않습니다.

urlFilter($scope, ['company_id']); 

내가 리소스를 가져오고 시계에 company_id을 설정하는 컨트롤러에서 :

app.factory('urlFilter', ['$location', function ($location) { 
    var urlParams = $location.search(); 
    return function ($scope, myUrlParams) { 
     angular.forEach(myUrlParams, function (param) { 
      $scope[param] = isset(urlParams[param]) ? urlParams[param] : 0; 

      $scope.$watch(param, function (value) { 
       if (isset(value)) { 
        $location.search(param, value); 
       } 
      }); 
     }); 
    }; 
}]); 

urlFilter 컨트롤러에서 호출 된 마지막이다. company_id은 드롭 다운을 사용하여 업데이트됩니다. company_id가 업데이트 될 때마다 나는 자원을 다시 반입 :

$scope.$watch('company_id', function (companyId) { 
    if (!isset(companyId)) { 
     return; 
    } 

    Api.resource.query({company_id: companyId}, function (data) { 
     $scope.resources = data; 
    }); 
}); 

이 방법은 내 로컬 호스트 환경에서 완벽하게 작동합니다. 하지만 프로덕션에 업로드 할 때마다 일종의 작품이됩니다. 회사를 변경하면 리소스가 다시 쿼리되고 URL 매개 변수가 올바르게 설정됩니다. URL 매개 변수가있는 페이지를 새로 고치면 Chromes 디버깅 도구를 사용하여 올바른 company_id과 함께 리소스가 다시 쿼리되고 응답이 OK 인 것을 볼 수 있습니다. 그러나보기가 업데이트되지 않습니다. 즉, 빈 자원 목록과 초기 회사가 회사 드롭 다운에 설정되어 있습니다.

내가 잘못 했습니까? 더 나은 접근 방법이 있습니까? 각도 라우팅을 사용하고 있지 않습니다.

참고 : isset()은 내가 직접 작성한 함수입니다.

$scope[param] = isset(urlParams[param]) ? parseInt(urlParams[param]) : 0; 

답변

0

은 즉, $location에서 수집 된 값을 사용하는 경우 parseInt()을 추가하여 수정되었습니다.
+0

이상한 것은이 솔루션은 내 로컬 환경에서 작동하지 않을 수 있지만, 생산에 잘 작동한다는 것입니다 : –

관련 문제