angular.js:12520 TypeError:无法读取属性' post'未定义的

时间:2016-06-16 12:22:33

标签: javascript jquery html angularjs

我对angularjs非常新,我看了很多网页,但没有得到任何具体的解决方案。

我想要实现的是我正在创建一个工厂服务来验证用户。验证成功后,导航到仪表板页面。

我收到以下错误:

angular.js:12520 TypeError: Cannot read property 'post' of undefined
    at Object.factory.authentication (login.html:74)
    at r.$scope.loginCall (login.html:65)
    at fn (eval at compile (angular.js:13365), <anonymous>:4:218)
    at e (angular.js:23613)
    at r.$eval (angular.js:16052)
    at r.$apply (angular.js:16152)
    at HTMLInputElement.<anonymous> (angular.js:23618)
    at HTMLInputElement.dispatch (jquery-1.9.1.min.js:3)
    at HTMLInputElement.v.handle (jquery-1.9.1.min.js:3)

我的Html代码是:

    <div ng-app="loginFormApp" ng-controller="loginFormCtrl">

<form method="post" action="" id="login_form" class="row">
                            <input type="text" placeholder="Login ID" ng-model="loginId" >
                            <input type="password" placeholder="Password" ng-model="password" >
                            <input type="button" class="btn btn-theme" ng-click="loginCall()" value="Login">
                            <input type="button" class="btn btn-theme" ng-click="loginCall()" value="Register Here">
                        </form>
                        </div>

我的控制器是:

 var app = angular.module('loginFormApp', []);
            app.controller('loginFormCtrl', function($scope, $http, AuthService) {
                $scope.loginCall = function() {

                    AuthService.authentication();

                };
            });

我的工厂服务是:

 app.factory('AuthService', function() {
            var factory = {};
            factory.authentication = function($http) {
                //alert("hello1");
                $http.post("http://103.19.89.152:8080/ccp-services/authenticate", {
                        'userName': $scope.loginId,
                        'password': $scope.password
                    })
                    .then(function(response) {

                        window.location.href = "http://103.19.89.152:8080/earnfit/ui/angular/dashboard.html";
                    });
            };
            return factory;
        });

2 个答案:

答案 0 :(得分:1)

在Factory方法中,您没有注入$ http,因此在访问它时它是未定义的。

请参阅以下代码

app.factory('AuthService', function ($http) {
return {
    authentication : function (UserName, Password) {
        $http.post("http://103.19.89.152:8080/ccp-services/authenticate", { 'userName': UserName, 'password': Password})
            .then(function (response) { window.location.href = "http://103.19.89.152:8080/earnfit/ui/angular/dashboard.html";}, 
                  // Error Handling
                  function (response) {console.log(response)});
    }
  }
});

所以,如果你观察我删除了范围,而是我将登录数据作为参数传递,这将起到注入$ scope的作用。

- Farhan

答案 1 :(得分:0)

添加$http 作为对工厂的依赖。

app.factory('AuthService', function($http) {

问候。