gpt4 book ai didi

javascript - 无法获取从服务中填充的 $scope.data Angular

转载 作者:行者123 更新时间:2023-12-03 10:05:28 25 4
gpt4 key购买 nike

我无法从服务产生的对象中填充我的作用域变量。

这是我的服务:

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);

});


}

即使我已经将数据对象推送到 individualInfo 数组中,我也无法填充 $scope.personalInfo 数组。

事实上,当我在 .then 函数内部使用 console.log(data) 时,它会输出数据,但是当我在 .then block 之外执行相同操作时,它不会显示任何内容。

请帮帮我。我完全被这个困住了

<小时/>

更新

我已完成以下操作:

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,因此,在 Controller 上只需要将其作为变量调用即可。

示例:

$scope.data = StudentService.getPersonalInfo($stateParams.pi_id);

瞧!,感谢那些帮助我的人,特别感谢我的 friend @arwaniali 向我建议这个解决方案,以及所有回答这个问题的人。谢谢:)

最佳答案

您的 getPersonalInfo 与返回的内容不一致。如果 http 调用成功并且您获取了数据,您将返回实际数据而不是 promise 。如果您希望函数始终返回 Promise,那么您应该按以下方式更改 getPersonalInfo:

getPersonalInfo:function(pi_id) {
var deferred = $q.defer();
$http.get(app.baseUrlServer + app.baseUrlUser + '/getpersonalinfo/' + pi_id)
.then(function(response){
if (response.data) {
deferred.resolve(response.data);
} else {
// invalid response
deferred.reject(response.data);
}
},function(response){
// invalid response
deferred.reject("Error");
});
return deferred.promise;
}

关于javascript - 无法获取从服务中填充的 $scope.data Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30377484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com