函数返回未定义的 AngularJS
2015-02-11
4306
下面是我的控制器代码:
///////
//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
变量的未定义值,这看起来很尴尬,因为当我使用控制器获取有效载荷时它可以工作,但从服务返回有效载荷似乎不起作用。
3个回答
$http.get
是异步函数,返回
HttpPromise
。有几种方法可以获取
data
1.传递
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.返回
promise
diary.factory('notesService', function($http) {
return {
getText: function () {
return $http.get('www/getNotes.php');
}
}
});
notesService.getText().then(
function(payload) {
callback(payload.data);
});
Oleksandr T.
2015-02-11
您获得
undefined
,因为您没有从
getText()
中返回任何内容。在
$ http
在您的方法中添加返回语句:
273763261
之后致电
然后
Promise的方法要获取值:
443946383
Miguel Mota
2015-02-11
$http.get
返回一个
Promise
。
由于
then
中的 promise 回调是异步的,因此您需要在控制器中处理该 promise。为此,首先在工厂中返回该 promise:
return $http.get('www/getNotes.php') <-- return added at the beginning of this line
.then(function (payload){
return payload.data;
});
然后,在控制器中处理该 promise:
$scope.updateFunc = function () {
notesService.getText().then(function(notes) {
console.log(notes);
});;
};
Davin Tryon
2015-02-11