После изменения файла JSON данные возврата к заводским значениям углов остались прежними

0

Я вызываю файл 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);
    });

})

  • 0
    Добро пожаловать в ТАК. Не могли бы вы также отформатировать первую и последнюю строчки кода, так как это может помочь людям быстрее понять код и, таким образом, быть более готовыми ответить на вопрос ;-)?
Теги:
service

2 ответа

0
Лучший ответ

Вам нужно создать объект отложенного объекта каждый раз, когда вы вызываете фабричный метод. Он должен возвращать новые обещания каждый раз, когда вы вызываете 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;
})
  • 0
    Сукчес устарела, используйте .then . Кроме того, $http уже возвращает само обещание
  • 0
    Это все вместе разные обсуждения .. :)
Показать ещё 4 комментария
1

Вам не нужно явно создавать отложенный объект и разрешать/отклонять его вручную. метод $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);
        });
    })
})
  • 0
    Вы можете использовать .finally вместо .success и .error , также .success и .error не рекомендуется
  • 0
    Да уж. Это уже редактировалось. Спасибо за указание, хотя :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню