Angular 1.5.0 - 为什么工厂只调用一次
Angular 1.5.0 - Why is factory called only once?
我有一个显示来自 Angular 工厂的数据的html
模板。问题是工厂的 get
方法仅在首次加载页面时才执行对后端的调用。反复打开页面时,我只看到第一次调用后端的结果。
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);
}
我在工厂设置了一个断点 - 应用程序仅在我第一次访问页面时暂停。
为什么我的工厂只叫一次,我该如何解决这个问题?
来自 Angular 文档:
注意:Angular 中的所有服务都是单例。这意味着注入器最多使用每个配方一次来创建对象。然后,注入器缓存引用以满足所有未来需求。
所以你是对的,所有服务只创建一次,然后由 Angular 缓存。
编辑:在下面更好地回答您的情况:
$resource缓存
您可以通过将选项添加到$resource
调用来禁用缓存资源:
return $resource('/companies/getCompany/:companyId', {}, {
get: {
method: 'GET',
params: {
'companyId': $routeParams.companyId
},
cache: false // THIS LINE
}
}
编辑 2:根据文档,$resource
的第一个参数不是可选的,必须是 url。
也许您可以在控制器中使用低级$http方法。
$resource是一个很棒的实用程序,但在您的情况下,您不希望保留数据。
试试 $http.get 方法。
或者尝试 query() 方法。
$scope.myData = DataFactory.query();
终于解决了这个问题。工厂使用不正确。这是工厂模块
.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;
});
现在,每次加载页面时都会显示正确的数据。
相关文章:
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Angular 1.5变量在调用一次之前不起作用
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- Javascript 计时器只调用一次 Code 隐藏方法
- 一段时间后调用函数,但只调用一次
- 每隔1秒调用一次jQueryajax是否安全
- 什么时候函数只能调用一次
- 如何在重复满足条件时调用一次辅助函数
- JS:.apply(null,arguments)——为什么我的函数被调用一次,而console.log被调用多次
- Angular指令删除只调用一次的DOM元素
- 对于新建的元素,onchange函数只调用一次
- ASP.NET:每5分钟从代码后面调用一次弹出窗口
- 每10秒调用一次页面加载事件
- 调用一次jQuery函数
- 我想在窗口加载后只调用一次JavaScript setInterval函数
- 如何只调用一次事件处理程序,而不是每次单击项目时调用事件处理程序
- 回调函数不会在使用 $timeout 的服务中只调用一次
- Angular 1.5.0 - 为什么工厂只调用一次
- 仅调用一次 onkeyup 函数