AngularJS 服务 returns 未定义
AngularJS Service returns undefined
我有以下服务:
app.services.emailService = ['$http', '$sce', function ($http, $sce) {
return {
getMessage: function(messageId, callback) {
$http.get('/api/email/inbox' + '/' + messageId).then(function(response) {
response.data.message.updated_at = new Date(response.data.message.updated_at.replace(/-/g,"/"));
response.data.message.body = $sce.trustAsHtml(response.data.message.body);
return response.data;
});
}
};
}];
在我的控制器中,我将 return 值分配给 $scope.message
变量,以便我可以在前端显示。
$scope.message
未定义
$scope.getMessage = function(messageId) {
$scope.message = emailService.getMessage($scope.messages[messageId].id);
console.log($scope.message);
}
您的函数 getMessage 没有 return 语句。但是$http is asynchronous so it will return a promises.
app.services.emailService = ['$http', '$sce', function ($http, $sce) {
return {
getMessage: function(messageId, callback) {
var deferred = $q.defer();
$http
.get('/api/email/inbox' + '/' + messageId)
.then(function () {
response.data.message.updated_at = new Date(response.data.message.updated_at.replace(/-/g,"/"));
response.data.message.body = $sce.trustAsHtml(response.data.message.body);
deferred.resolve(response.data);
})
.catch(function (e) {
deferred.reject(e);
);
return deferred.promise;
}
};
}];
在你的控制器中
$scope.getMessage = function(messageId) {
emailService
.getMessage($scope.messages[messageId].id)
.then(function (message) {
$scope.message = message;
console.log(message);
});
}
如果你想在 emailService 中清理你的响应,你需要自己声明一个承诺。
我有以下服务:
app.services.emailService = ['$http', '$sce', function ($http, $sce) {
return {
getMessage: function(messageId, callback) {
$http.get('/api/email/inbox' + '/' + messageId).then(function(response) {
response.data.message.updated_at = new Date(response.data.message.updated_at.replace(/-/g,"/"));
response.data.message.body = $sce.trustAsHtml(response.data.message.body);
return response.data;
});
}
};
}];
在我的控制器中,我将 return 值分配给 $scope.message
变量,以便我可以在前端显示。
$scope.message
未定义
$scope.getMessage = function(messageId) {
$scope.message = emailService.getMessage($scope.messages[messageId].id);
console.log($scope.message);
}
您的函数 getMessage 没有 return 语句。但是$http is asynchronous so it will return a promises.
app.services.emailService = ['$http', '$sce', function ($http, $sce) {
return {
getMessage: function(messageId, callback) {
var deferred = $q.defer();
$http
.get('/api/email/inbox' + '/' + messageId)
.then(function () {
response.data.message.updated_at = new Date(response.data.message.updated_at.replace(/-/g,"/"));
response.data.message.body = $sce.trustAsHtml(response.data.message.body);
deferred.resolve(response.data);
})
.catch(function (e) {
deferred.reject(e);
);
return deferred.promise;
}
};
}];
在你的控制器中
$scope.getMessage = function(messageId) {
emailService
.getMessage($scope.messages[messageId].id)
.then(function (message) {
$scope.message = message;
console.log(message);
});
}
如果你想在 emailService 中清理你的响应,你需要自己声明一个承诺。