2014-10-22 66 views
-1

我開始與角JS,我創建了一個工廠與學生數據。 學生數據如下所示。

{ 
    "male": [ 
     ["John", "Smith", "2000-10-10"], 
     ["James", "Smith", "2000-10-10"] 
    ] 
} 

我有一個工廠,一個控制器設置如下圖所示

.factory('Students', ['$http', function($http) { 
     var data = {}; 
     return { 
      getStudents: function() { 
       $http.get('api/students.json'). 
       success(function(data, status, headers, config) { 
       console.log(data.male); //returns the array of males 
       data.studentlist = data.male; 
       data.propertyOne = 'propertyOne'; //returns propertyOne but should also return in console.log(data) that I have further down the page. 
       console.log(data.propertyOne); 

       }). 
       error(function(data, status, headers, config) { 
       // log error 
       console.log('error'); 
       }); 
       data.propertyTwo = 'propertyTwo'; 
       console.log(data); //returns propertyTwo 

       return data; 
      } 
     } 
    }]); 

    .controller('StudentCtrl', ['$scope', 'Students', 
     function ($scope, Students) { 
     $scope.students = Students.getStudents(); 
     console.log($scope); // only properyTwo is returned in the students scope 
    }]) 

我不能工作是如何得到這被裝上的成功將被添加到我的數據對象的數據? 正如您從我的評論中看到的那樣,我在成功時返回了數據,但在我的成功功能之外不再可用? 我需要在這裏更改這個工作,以便在我的控制器中,我可以訪問從我的students.json文件返回的學生列表。

+1

有許多的這些,這裏有一些其他.. HTTP://計算器。 com/questions/12505760/processing-http-response-in-service,http://stackoverflow.com/questions/19121918/returning-response-data-from-http-in-angular-factory。官方文檔相當不錯好。 – PSL 2014-10-22 01:38:28

回答

2

這是一個計時問題。當console.log(data); //returns propertyTwo運行時,您仍然沒有在成功回調中完成任務。如果時間在這裏非常關鍵,那麼您必須同時進入成功回調。

我會建議您解決在控制器中的承諾(添加成功回調出現,而不是在服務做的