我开始使用角度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文件返回的学生列表。
答案 0 :(得分:2)
这是一个时间问题。当console.log(data); //returns propertyTwo
运行时,您仍未在成功回调中进行分配。如果时间关键,你必须将两者都移动到成功回调中。
我建议您解决控制器中的承诺(在那里添加成功回调,而不是在服务中执行。