Javascript 每次路线变更时都会调用ajax
我有一个工厂,其中有一个函数getExpensList,它执行一个ajax调用,查询费用表并给出结果 现在我有两个路径,1是费用列表,它通过上述函数推送费用,第二个路径是add。当我更改路由并返回清单页面时,会再次调用ajax。理想情况下,我应该能够在第一次ajax调用时存储expense对象,然后引用同一对象,直到有人手动刷新浏览器 请帮我做这个。这是我的工厂代码。理想情况下,如果有数据,我想参考这一点Javascript 每次路线变更时都会调用ajax,javascript,ajax,angularjs,angular-routing,angular-services,Javascript,Ajax,Angularjs,Angular Routing,Angular Services,我有一个工厂,其中有一个函数getExpensList,它执行一个ajax调用,查询费用表并给出结果 现在我有两个路径,1是费用列表,它通过上述函数推送费用,第二个路径是add。当我更改路由并返回清单页面时,会再次调用ajax。理想情况下,我应该能够在第一次ajax调用时存储expense对象,然后引用同一对象,直到有人手动刷新浏览器 请帮我做这个。这是我的工厂代码。理想情况下,如果有数据,我想参考这一点 admin.factory('expenseFact', ['$http', functi
admin.factory('expenseFact', ['$http', function($http) {
var expense = {};
this.expenses = "";
expense.getExpenseList = function() {
this.expenses = $http({
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
method: "GET",
url: base_url + "rest/expenses"
});
return this.expenses;
};
return expense;
}]);
这是我的控制器代码
admin.controller('expenseLandCtrl', function ($scope,$rootScope,expenseFact) {
$scope.pageTitle = $rootScope.pageTitle;
expenseFact.getExpenseList().then(function (data) {
$scope.expenses = data.data;
});
});
admin.controller('expenseAddCtrl', function ($scope,$rootScope,expenseFact) {
$scope.pageTitle = $rootScope.pageTitle;
});
你们的工厂会是这样的
admin.factory('expenseFact', ['$http', function($http) {
return {
getExpenseList: function() {
var expense = {};
this.expenses = $http({
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
method: "GET",
url: base_url + "rest/expenses"
});
return this.expenses;
}
}
}]);
你们可以用同样的方法从控制器中调用它,它不会自动调用。
顺便说一句,我建议使用承诺
下面是使用promise的相同代码
admin.factory('expenseFact', ['$http', '$q'. function($http, $q) {
return {
getExpenseList: function(){
var deferred = $q.defer();
$http({method: 'GET',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).
then(function(response) {
deferred.resolve(response.data);
}, function(response) {
deferred.reject(response.status)
});
return deferred.promise;
}
}
}]);
当工厂第一次装载时,您需要获得一次费用
admin.factory('expenseFact', ['$http', function($http) {
var expenses = null;
$http({
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
method: "GET",
url: base_url + "rest/expenses"
}).success(function (exp) {
expenses = exp;
}); // get the expenses when the factory is loaded
return {expenses: expenses};
}]);
这样做的目的是使从工厂返回的
费用引用一次性ajax调用以获取费用。我建议您使用模块模式,仅在需要时调用GetExpensList。在您的工厂中,它的返回费用总是很高,这就是为什么它总是被调用,因为您将它作为json对象费用的一部分url在哪里?我想试试承诺的东西。但我不确定你把网址放在哪里