필터링 할 수있는 목록에 데이터를 표시하는 웹 사이트가 있습니다. 필터가 적용될 때 매개 변수로 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;
이상한 것은이 솔루션은 내 로컬 환경에서 작동하지 않을 수 있지만, 생산에 잘 작동한다는 것입니다 : –