以下是我的控制器代码:
///////
//Diary Notes Controller
///////
diary.controller('NotesController', ['$scope','$http', 'notesService', function ($scope, $http, notesService){
//
//Get the Notes data back from the Server
//
$scope.updateFunc = function () {
var notes = notesService.getText();
console.log(notes);
};
$scope.updateFunc();
我的服务代码:
diary.factory('notesService', function ($http) {
return {
getText: function () {
$http.get('www/getNotes.php')
.then(
function (payload){
return payload.data;
});
}
}
});
基本上当我执行console.log时,控制器返回未定义的notes
变量,这看起来很尴尬,因为当我使用控制器获取有效负载时,但从服务返回有效负载似乎不工作
答案 0 :(得分:2)
您获得undefined
,因为您没有从getText()
返回任何内容。在方法中$http
调用之前添加一个return语句:
getText: function () {
return $http.get('www/getNotes.php')
.then(function (payload) {
return payload.data;
});
}
然后调用promise的then
方法获取值:
notesService.getText().then(function(notes) {
console.log(notes);
});
答案 1 :(得分:2)
$http.get是异步函数,返回HttpPromise
。有几种方法可以获得data
1.Pass callback
,像这样
diary.factory('notesService', function($http) {
return {
getText: function (callback) {
$http.get('www/getNotes.php')
.then(
function(payload) {
callback(payload.data);
});
}
}
});
notesService.getText(function (notes) {
console.log(notes);
});
2.return promise
diary.factory('notesService', function($http) {
return {
getText: function () {
return $http.get('www/getNotes.php');
}
}
});
notesService.getText().then(
function(payload) {
callback(payload.data);
});
答案 2 :(得分:1)
$http.get
会返回Promise。
由于then
中的promise回调是异步的,因此您需要在控制器中处理promise。要做到这一点,首先在工厂中返回承诺:
return $http.get('www/getNotes.php') <-- return added at the beginning of this line
.then(function (payload){
return payload.data;
});
然后,处理控制器中的承诺:
$scope.updateFunc = function () {
notesService.getText().then(function(notes) {
console.log(notes);
});;
};
答案 3 :(得分:1)
问题是你没有在getText函数上返回任何内容。如果从$ http.get返回promise,则应实现任何promise方法以实现模型变量注释
diary.factory('notesService', function ($http) {
return {
getText: function () {
return $http.get('www/getNotes.php')
.then(
function (payload){
return payload.data;
});
}
}
});