javascript - 类型错误 : Cannot read property 'post' of undefined

标签 javascript angularjs

我收到以下错误:

TypeError: Cannot read property 'post' of undefined
    at postName (http://127.0.0.1:9000/scripts/controllers/main.js:28:12)
    at Scope.$scope.submit (http://127.0.0.1:9000/scripts/controllers/main.js:10:7)
    at http://127.0.0.1:9000/bower_components/angular/angular.js:10348:21
    at http://127.0.0.1:9000/bower_components/angular/angular.js:18333:17
    at Scope.$eval (http://127.0.0.1:9000/bower_components/angular/angular.js:12175:28)
    at Scope.$apply (http://127.0.0.1:9000/bower_components/angular/angular.js:12273:23)
    at Scope.$delegate.__proto__.$apply (<anonymous>:855:30)
    at HTMLFormElement.<anonymous> (http://127.0.0.1:9000/bower_components/angular/angular.js:18332:21)
    at HTMLFormElement.jQuery.event.dispatch (http://127.0.0.1:9000/bower_components/jquery/dist/jquery.js:4641:9)
    at HTMLFormElement.elemData.handle (http://127.0.0.1:9000/bower_components/jquery/dist/jquery.js:4309:46) angular.js:9563(anonymous function) angular.js:9563(anonymous function) angular.js:7004Scope.$apply angular.js:12275$delegate.__proto__.$apply VM1976:855(anonymous function) angular.js:18332jQuery.event.dispatch jquery.js:4641elemData.handle

我的 main.js 文件:

'使用严格';

angular.module('sayHiApp')
  .controller('MainCtrl', function ($scope) {

    // Accepts form input
    $scope.submit = function() {

      // POSTS data to webservice
      postName($scope.input);

      // GET data from webservice
      var name = getName();

      // DEBUG: Construct greeting
      $scope.greeting = 'Sup ' + name + ' !';

    };

    function postName ($scope, $http, dataToPost) {

      $http.post('/name', dataToPost).
      success(function(data) {
        $scope.error = false;
        $scope.data = data;
      }).
      error(function(data) {
        $scope.error = true;
        $scope.data = data;
      });
    }

    // GET name from webservice
    function getName ($scope, $http) {

      $http.get('/name').
      success(function(data) {
        $scope.error = false;
        $scope.data = data;

        return data;
      }).
      error(function(data) {
        $scope.error = true;
        $scope.data = data;

        return 'error name';
      });

    }

  });

我不确定这个错误指的是什么?如果它指的是“$http”上的“post”方法,那么我会很困惑。提前感谢您的帮助:)

最佳答案

这指的是您建议的“$http”上的“post”方法。

您需要在 Controller 函数中添加 $http 作为参数,以便 Angular 会注入(inject)它(就像您对 $scope 所做的那样)。

我对您的代码进行了另一项更改,从内部函数中删除了 $scope 和 $http 参数,因为由于闭包,它们在函数中是已知的。

angular.module('sayHiApp')
  .controller('MainCtrl', function ($scope, $http) {

// Accepts form input
$scope.submit = function() {

  // POSTS data to webservice
  postName($scope.input);

  // GET data from webservice
  var name = getName();

  // DEBUG: Construct greeting
  $scope.greeting = 'Sup ' + name + ' !';

};

function postName (dataToPost) {

  $http.post('/name', dataToPost).
  success(function(data) {
    $scope.error = false;
    $scope.data = data;
  }).
  error(function(data) {
    $scope.error = true;
    $scope.data = data;
  });
}

// GET name from webservice
function getName () {

  $http.get('/name').
  success(function(data) {
    $scope.error = false;
    $scope.data = data;

    return data;
  }).
  error(function(data) {
    $scope.error = true;
    $scope.data = data;

    return 'error name';
  });
}
});

关于javascript - 类型错误 : Cannot read property 'post' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340240/

相关文章:

javascript - angularjs - Controller 没有加载我的场景

javascript - 分组数组内的编号

javascript - 为什么使用 <canvas> 而不是普通的旧 Javascript?

javascript - for a=1;a<100;a++ 然后当 a 是 3 的倍数时创建一个 <br>

javascript - QuickSort 算法因 stackoverflow 错误而失败

javascript - 使用隔离范围获取隐藏按钮的属性

angularjs - 以 Angular 上传多个文件

javascript - 在 JavaScript 中将 XML 字符串转换为 HTML 形式

javascript - 从 TypeScript 调用 JavaScript 函数

javascript - 如何根据 Angular js中json数据中的响应更改纯文本中的数据