函数返回未定义的AngularJS

时间:2015-02-11 08:46:20

标签: javascript angularjs

以下是我的控制器代码:

///////
//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变量,这看起来很尴尬,因为当我使用控制器获取有效负载时,但从服务返回有效负载似乎不工作

4 个答案:

答案 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;
                });

             }

          }
   });