我无法从服务产生的对象中填充我的范围变量。
这是我的服务:
app.factory("studentService", ['$http','$q','$localstorage','$state',
function($http,$q,$localstorage,$state) {
return{
getPersonalInfo:function(pi_id)
{
return $http.get(app.baseUrlServer + app.baseUrlUser + '/getpersonalinfo/' + pi_id)
.then(function(response){
if (response.data) {
return response.data;
} else {
// invalid response
return $q.reject(response.data);
}
},function(response){
// invalid response
return $q.reject(response.data);
});
}
}
/* my controller */
var app_ctrl = angular.module('app.controllers');
app_ctrl.controller('MatesprofileController',
['$scope','$stateParams','studentService','$localstorage',
function($scope, $stateParams, studentService , $localstorage) {
$scope.personalInfo=[];
studentService.getPersonalInfo($stateParams.pi_id).then(function(data){
$scope.personalInfo.push(data);
});
}

即使我已经将数据对象推送到personalInfo数组中,我也无法填充$ scope.personalInfo数组。
实际上,当我在.then函数内部的console.log(数据)时,它会输出数据,但是当我这样做时,就在.then块之外,它什么都没显示..
请帮助我。我完全坚持这个我做了以下事情:
app.factory("studentService", ['$http', '$q', '$localstorage', '$state',
function($http, $q, $localstorage, $state) {
return {
getPersonalInfo: function(pi_id) {
var defer = $q.defer();
$http.get(app.baseUrlServer + app.baseUrlUser + '/getpersonalinfo/' + pi_id)
.then(function(response) {
if (response.data) {
defer.resolve(response.data);
} else {
// invalid response
defer.reject(response.data);
}
}, function(response) {
// invalid response
defer.reject("Error");
});
return defer.promise;
}
}
}
/* CONTROLLER */
var app_ctrl = angular.module('app.controllers');
app_ctrl.controller('MatesprofileController', ['$scope', '$stateParams', 'studentService', '$localstorage',
function($scope, $stateParams, studentService, $localstorage) {
//$scope.personalInfo=[];
studentService.getPersonalInfo($stateParams.pi_id).then(function(data) {
$scope.data = data;
console.log($scope.data); //this shows up correctly, but it executed latest
});
console.log($scope.data); // this shows up first in the console, but it's empty
}

仍然没有工作:(
最后,我通过简单地不使用then()函数来实现它。因为服务返回实际数据而不是promise,因此,在控制器上只需要将其作为变量调用。
示例:
$ scope.data = studentService.getPersonalInfo($ stateParams.pi_id);
瞧瞧!感谢那些帮助我的人,特别感谢我的朋友@arwaniali建议我这个解决方案以及所有回答过这个问题的人。谢谢:))答案 0 :(得分:1)
您的Clients.All.testing(msg);
与其返回的内容不一致。如果http调用成功并且您获得数据,则返回实际数据而不是promise。如果您希望函数始终返回一个promise,那么您应该通过以下方式更改getPersonalInfo
:
getPersonalInfo
答案 1 :(得分:0)
$ http服务返回一个promise。您应该将此承诺返回给控制器,然后测试返回数据并在必要时执行相应的错误处理。
app.controller('MatesprofileController', ['$scope','studentService', function($scope, studentService ) {
$scope.personalInfo=[];
studentService.getPersonalInfo(123).then(function(data){
if(data !== undefined && data.length > 0)
$scope.personalInfo = data;
else
console.log('handle error');
console.log($scope.personalInfo);
});
}]);