我有一个html
模板,用于显示Angular工厂的数据。问题是工厂的get
方法仅在第一次加载页面时才执行对后端的调用。当重复打开页面时,我只看到第一次调用后端的结果。 看起来工厂以某种方式缓存结果。 德尔>
使用Chrome调试工具,我发现Angular会在每次加载页面时使用相同的资源ID发出GET
个请求。
这是工厂定义:
.factory('Company', ['$resource', '$routeParams', function ($resource, $routeParams) {
return $resource('/companies/getCompany/:companyId', {}, {
get: {
method: 'GET',
url: '/companies/getCompany/:companyId',
params: {
'companyId': $routeParams.companyId
}
},
save: {
method: 'POST',
url: '/companies/updateCompany'
},
insert: {
method: 'POST',
url: '/companies/createNewCompany'
}
});
}])
这是控制器代码
.controller('MyController', ['$scope', '$location', 'Company',
function ($scope, $location, Company) {
Company.get(function (data) {
$scope.company = data;
});
}]);
我正在使用ng-click
打开页面
<tr ng-repeat="company in companies"
ng-click="redirectToCompanyForm(company.id)">
$scope.redirectToCompanyForm = function (companyId) {
$location.url('/updateCompany/' + companyId);
}
我在工厂设置断点 - 应用程序仅在我第一次访问页面时暂停。
为什么我的工厂只调用一次,我该如何解决?
答案 0 :(得分:0)
来自Angular docs:
注意:Angular中的所有服务都是单例。这意味着进样器最多使用一次配方来创建对象。然后,注射器会缓存该参考,以满足未来的所有需求。
所以你是对的,所有服务只创建一次然后由Angular缓存。
编辑:更好地回答下面的情况:
您可以通过向$resource
调用添加选项来禁用资源缓存:
return $resource('/companies/getCompany/:companyId', {}, {
get: {
method: 'GET',
params: {
'companyId': $routeParams.companyId
},
cache: false // THIS LINE
}
}
编辑2:根据文档,$resource
的第一个参数不是可选的,必须是网址。
答案 1 :(得分:0)
也许您可以在控制器中使用低级$ http方法。
$ resource是一个很棒的实用程序,但在您的情况下,您不希望持久保存数据。
尝试使用$ http.get方法..
或尝试使用 query()方法。
$scope.myData = DataFactory.query();
答案 2 :(得分:0)
最后解决了这个问题。工厂使用不正确。这是工厂模块
.factory('Company', ['$resource', function ($resource) {
return $resource('/companies/getCompany/:id', null, {
save: {
method: 'POST',
url: '/companies/updateCompany'
},
insert: {
method: 'POST',
url: '/companies/createNewCompany'
}
});
}])
这就是应该如何调用工厂
Company.get({id: $routeParams.companyId}, function (data) {
$scope.company = data;
});
现在每次加载页面时都会显示正确的数据。