2015-10-22 1 views
0

Я пытаюсь вернуть некоторые данные из угловой службы, которая вызывает конечную точку REST, однако я не могу заставить поток данных правильно, так как он асинхронен.Невозможно вернуть данные списка из углового обслуживания в контроллер

Мой способ обслуживания.

appService.getApplicationSupportFiles = function() { 
     $http.post("/SEFlex/SEFlexAdmin/GetApplicationSupportFiles") 
      .then(function (response, status, headers, config) { 
       if (response.data) { 
        var list = JSON.parse(response.data.data); 
        return list; 
       } 
      }); 
    } 

Мой контроллер

function ShowApplicationFilesController($scope, $http, $modalInstance, $log, SEApplicationService, $rootScope, AlertsService) { 

    $rootScope.closeAlert = AlertsService.closeAlert; 
    $scope.supportFiles = []; 
    $scope.originalSupportFiles = []; 
    $scope.isBusy = false; 

    $scope.newFile = { 
     localFile: "", 
     cloudFile: "", 
    } 

    // Load the initial files 
    $scope.supportFiles = SEApplicationService.getApplicationSupportFiles(); 
    $scope.originalSupportFiles = $scope.supportFiles; 

    $scope.addApplicationFile = function() { 
     var file = { LocalPath: $scope.newFile.localFile, ShareName: "b", FolderName: "c", FileName: "d" }; 
     $scope.supportFiles.push(file); 
     $scope.newFile = { localFile: "", cloudFile: "" }; 
    } 
} 

Проблема заключается вызов для заполнения supportFiles является асинхронным так supportFiles неопределен, когда originalSupportFiles пытается скопировать значения. Но также, когда я нажимаю на addApplicationFile(), он не может нажать на значение $ scope.supportFiles, поскольку он считает, что он не определен, поэтому он выглядит так, что значения вообще не загружаются, даже несмотря на то, что служба вызывается и возвращает данные ,

Что я сделал не так?

+0

Посмотрите в '$ q' и возвращающимся обещания, вы» Я хочу вернуть обещание и использовать функцию .then(). – CollinD

ответ

0

Вы должны вернуть обещание и идти оттуда - вот один из способов:

return $http.post("/SEFlex/SEFlexAdmin/GetApplicationSupportFiles").then(function (response, status, headers, config) { 
    return response.data; 
}); 

А затем в контроллере:

SEApplicationService.getApplicationSupportFiles().then(function(list) { 
    $scope.supportFiles = list; 
}); 
+0

Я только что попробовал изменить свой контроллер на то, что вы предложили выше (служба уже использует. Then, как показано выше, но я получаю ошибку javascript «0x800a138f - ошибка времени выполнения JavaScript: не удается получить свойство« then »неопределенной или нулевой ссылки »в контроллере. – NZJames

+0

@NZJames - ваш сервис не возвращает запрос' $ http' - он просто возвращает 'data'. – tymeJV

+0

Вот что вы имели в своем ответе выше, возвращая response.data. Если служба не имеет a .then() method? – NZJames

Смежные вопросы