Angular JS从控制器中的工厂访问$ http数据

时间:2014-10-22 01:02:44

标签: javascript html angularjs

我开始使用角度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 个答案:

答案 0 :(得分:2)

这是一个时间问题。当console.log(data); //returns propertyTwo运行时,您仍未在成功回调中进行分配。如果时间关键,你必须将两者都移动到成功回调中。

我建议您解决控制器中的承诺(在那里添加成功回调,而不是在服务中执行。