我有一个网站,可以在可过滤的列表中显示数据。当应用过滤器时,我希望它作为参数附加到URL。我为此写了一个服务:
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
是控制器中调用的最后一件事:
urlFilter($scope, ['company_id']);
在控制器中,我获取资源并设置company_id
。使用下拉列表更新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;
});
});
此方法在我的localhost环境中完美运行。但每当我将它上传到生产时它都有用。如果我更改了公司,则会重新获取资源并正确设置URL参数。如果我刷新页面中包含URL参数,我会看到使用Chromes调试工具重新获取资源,并使用正确的company_id
并且响应正常。但是视图没有更新,即空资源列表和初始没有公司在公司下拉设置。
我做错了什么?有更好的方法吗?我没有使用角度路由。
注意:isset()是我自己写的一个函数。
答案 0 :(得分:0)
通过在使用从parseInt()
收集的值时添加$location
来修复,即:
$scope[param] = isset(urlParams[param]) ? parseInt(urlParams[param]) : 0;