2016-07-27 4 views
-1

В настоящее время я пытаюсь использовать службу $ http, чтобы попробовать и прочитать некоторые файлы JSON. Я успешно их читаю, но почему-то появляются как object Object по какой-то причине, поэтому я не могу прочитать свойства объектов.

Я читаю файл неправильно, когда я использую запрос GET? Но это странно, потому что, когда я использую данные JSON.stringify(), я могу видеть все свойства, которые должны быть там ... это просто, когда я получаю это нормально, они появляются как эти неопределенные объекты. Возможно ли, что я инициализирую переменные?

Вот моя функция, чтобы получить данные из файла JSON:

myMod.service('deployService', function ($http, envService) { 
var projectCache = []; 
var envCache = []; 
var envFilter = ""; 

function getDeployments() { 
    if (!projectCache) { 
     // return; 
    } else { 
     $http({ 
      method: 'GET', 
      url: '/json_files/dashboard.json' 
     }).then(
      function success(response) { 
       this.projectCache = response.data; 
       this.envFilter = envService.envFilter; 

       for (var i = 0; i < response.data.length; i++) { 
        // var item = JSON.stringify(response.data[i].environmentStatuses); 
        var item = response.data[i].environmentStatuses; 

        console.log("THE ITEM IS: " + item); 
        // this.envCache.push(item); 
        envCache.push(item); 

       } 

       console.log(envCache); 
      }, 
      function failure(reason) { 
       console.log("there was a failure in getProject in deployController") 
      }); 
    } 
}; 


return { 
    projectCache: projectCache, 
    envCache: envCache, 
    getDeployments: getDeployments, 
    envFilter: envFilter, 
    clearCaches: clearCaches 
}; 

}); 

Вот код для контроллера:

myMod.controller("deployController", ['$scope', '$http', '$location', 'envService', 'deployService', function ($scope, $http, $location, envService, deployService) { 

//store the projects in this array 
$scope.projects = []; 
$scope.editingData = {}; 


$scope.selectedRow = []; // initialize our variable to null 
$scope.setClickedRow = function (index) { //function that sets the value of selectedRow to current index 
    $scope.selectedRow[i] = $scope.selectedRow[i] != true; 
    console.log(index); 
    console.log("row " + $scope.selectedRow[i]); 
}; 


//being used to fetch the name and to get the index 
$scope.getProjName = function (index) { 
    // $scope.envFilter = { 
    //  name: "" 
    // }; 
    console.log("INSIDE GETPROJNAEM"); 
    envService.clickedEnv(index, $scope.projects); 

    //console.log($scope.envFilter); 
}; 



$http({ 
    method: 'GET', 
    url: './json_files/dashboard.json' 
}).then(function successCallback(response) { 
    $scope.projects = response.data; 

}, function errorCallback() { 
    alert("cant find the dashboard json"); 
}); 






//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ENVIRONMENT CONTROLLER LOGIC~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
$scope.projEnvironments = []; 
$scope.editingData = {}; 

deployService.getDeployments(); 
$scope.projEnvironments = deployService.envCache; 
$scope.envFilter = deployService.envFilter; 
console.log("DEPLOYSERVICE.ENVCACHE: " + deployService.envCache); 
// console.log("projenv: " + $scope.projEnvironments); 
// console.log("envFilter: " + $scope.envFilter); 


$scope.getBranchName = function (environment) { 
    envService.setBranchName(environment); 
    console.log("THE ENVBRANCH:" + $scope.envBranch); 
}; 

}]); 
+1

Вам необходимо позвонить в Службу с помощью вашего углового контроллера. Затем вы сможете прочитать содержимое, например deployService.GetDeployments() –

+0

@RaniRadcliff yes. Я вызываю 'deployService.GetDeployments()' в моем контроллере, но он все еще возвращает объект объекта. Обычно, когда объект возвращается, есть раскрывающееся меню в инструментах разработчика Chrome, но у этих объектов нет ни – winsticknova

+0

@winsticknova Не могли бы вы обновить сообщение своим кодом контроллера? –

ответ

0

Вы должны включить свой сервис в качестве зависимости в вашей соответствующий контроллер. Затем вызовите соответствующий метод из своей службы внутри контроллера.

Например:

myApp.controller('aController', ['$scope', 'deployService', function ($scope, deployService) { 
    //Some $scope variables and other controller code 
    deployService.getDeployments(); 
    $scope.myData = deployService.<variable from service>; 
}]); 

Кроме того, будьте осторожны при назначении переменных массивов в JavaScript; назначение будет выполняться по ссылке, а не по значению! Это может привести к нежелательным результатам, если их не учитывать.

+0

Я уже добавил службу к контроллеру. У меня нет проблем с вызовом функций в службе - это просто свойства возвращаемого объекта из запроса GET, по какой-то причине не могут быть прочитаны. Все кажется неопределенным. – winsticknova

+0

@winsticknova Похоже на проблему на back-end, если результаты не верны в запросе GET. Какие рамки или язык вы используете в фоновом режиме? –

0

попытка переписывания кода в контроллере, как это:

deployService.getDeployments() 
.success(function(data){ 
$scope.myData = data; 
}) 

Если зависший над $scope.myData не показывает вам массив объектов есть что-то еще не так.

0

Ваш фактический объект json возвращается с сервера в $http. Запрос response.data.

Если ваш json содержит свойство «data» в качестве массива, вам нужно перебрать его как;

response.data.data.forEach(
    d => JSON.stringify(d.environmentStatuses) 
)