Я вызываю файл camera.json из службы "cameraData" и вставляю службу cameradata в "CameraController". Если я сменил camera.json после нажатия кнопки обновления, я получаю старые данные. Есть идеи?
.factory('cameraData', function ($ http, $ q, globalVariable) {var deferred = $ q.defer();
var cameraData = {};
var contentType = "application/json; charset=utf-8";
cameraData.GetItemList = function(){
$('.loader').show();
var senddata ={};
senddata.installedcameraid = "9547857793457943";
$http({
//url: globalVariable.ServerAddress + "Admin_GetCameraPoints",
url: globalVariable.Camerafilepath,
dataType: 'json',
method: "POST",
data: JSON.stringify(senddata),
headers: {
"Content-Type": contentType,
"access_token": globalVariable.TOKEN
}
}).success(function(response){
//$scope.response = response;
deferred.resolve(response);
return deferred.promise;
}).error(function(error){
//$scope.error = error;
deferred.reject(error);
});
return deferred.promise;
}
return cameraData;
var cameraData = {};
var contentType = "application/json; charset=utf-8";
cameraData.GetItemList = function(){
$('.loader').show();
var senddata ={};
senddata.installedcameraid = "9547857793457943";
$http({
//url: globalVariable.ServerAddress + "Admin_GetCameraPoints",
url: globalVariable.Camerafilepath,
dataType: 'json',
method: "POST",
data: JSON.stringify(senddata),
headers: {
"Content-Type": contentType,
"access_token": globalVariable.TOKEN
}
}).success(function(response){
//$scope.response = response;
deferred.resolve(response);
return deferred.promise;
}).error(function(error){
//$scope.error = error;
deferred.reject(error);
});
return deferred.promise;
}
return cameraData;
}) })
.controller('CameraController', функция ($ scope, $ timeout, cameraData) {$ scope.refreshCameraData = function() {
$scope.allCamera = [];
cameraData.GetItemList()
.then(function(data) {
$scope.allCamera = data.Camera;
}, function(err) {
// promise rejected, could log the error
console.log('error', err);
});
}
cameraData.GetItemList()
.then(function(data) {
$scope.allCamera = data.Camera;
}, function(err) {
// promise rejected, could log the error
console.log('error', err);
});
})
Вам нужно создать объект отложенного объекта каждый раз, когда вы вызываете фабричный метод. Он должен возвращать новые обещания каждый раз, когда вы вызываете api. Измените свой заводский код следующим образом.
var cameraData = {};
$('.loader').show();
var contentType = "application/json; charset=utf-8";
cameraData.GetItemList = function(){
// need to create defer object everytime
var deferred = $q.defer();
$('.loader').show();
var senddata ={};
senddata.installedcameraid = "9547857793457943";
$http({
//url: globalVariable.ServerAddress + "Admin_GetCameraPoints",
url: globalVariable.Camerafilepath,
dataType: 'json',
method: "POST",
data: JSON.stringify(senddata),
headers: {
"Content-Type": contentType,
"access_token": globalVariable.TOKEN
}
}).success(function(response){
//$scope.response = response;
$('.loader').hide();
deferred.resolve(response);
return deferred.promise;
}).error(function(error){
//$scope.error = error;
$('.loader').hide();
deferred.reject(error);
});
return deferred.promise;
}
return cameraData;
})
.then
. Кроме того, $http
уже возвращает само обещание
Вам не нужно явно создавать отложенный объект и разрешать/отклонять его вручную. метод $http()
сам по себе возвращает обещание и может быть напрямую возвращен, как показано ниже.
.factory('cameraData', function ($http, $q,globalVariable) {
var cameraData = {};
$('.loader').show();
var contentType = "application/json; charset=utf-8";
cameraData.GetItemList = function(){
$('.loader').show();
var senddata ={};
senddata.installedcameraid = "9547857793457943";
return $http({
//url: globalVariable.ServerAddress + "Admin_GetCameraPoints",
url: globalVariable.Camerafilepath,
dataType: 'json',
method: "POST",
data: JSON.stringify(senddata),
headers: {
"Content-Type": contentType,
"access_token": globalVariable.TOKEN
}
}).then(function(response){
$('.loader').hide();
}).error(function(error){
$('.loader').hide();
});
}
return cameraData;
});
Кроме того, для скрытия загрузчика вы можете использовать метод .finally()
как .finally()
ниже:
return $http({
url: globalVariable.Camerafilepath,
dataType: 'json',
method: "POST",
data: JSON.stringify(senddata),
headers: {
"Content-Type": contentType,
"access_token": globalVariable.TOKEN
}
}).finally(function(response){
$('.loader').hide();
});
В вашем контроллере вы можете получить доступ к ответу как,
.controller('CameraController',function($scope,$timeout,cameraData){
$scope.refreshCameraData = function(){
$scope.allCamera = [];
cameraData
.GetItemList()
.then(function(response) {
$scope.allCamera = response.data.Camera;
}, function(err) {
// promise rejected, could log the error
console.log('error', err);
});
}
cameraData.GetItemList()
.then(function(response) {
$scope.allCamera = response.data.Camera;
}, function(err) {
// promise rejected, could log the error
console.log('error', err);
});
})
})
.finally
вместо .success
и .error
, также .success
и .error
не рекомендуется