Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:Users.create不是一个函数_Javascript_Angularjs_Controller_Typeerror - Fatal编程技术网

Javascript TypeError:Users.create不是一个函数

Javascript TypeError:Users.create不是一个函数,javascript,angularjs,controller,typeerror,Javascript,Angularjs,Controller,Typeerror,我的代码运行良好。我添加了一些新的登录功能,它破坏了它。所以我删除了代码。这是原始格式,但错误仍然存在,用户服务的create函数不是函数。我已经通读了很多关于这个话题的问题,但没有一个答案对我有帮助 UserController todoApp.controller('UserController', ['Users','$scope', function UserController(Users, $scope) { console.log("in user controller")

我的代码运行良好。我添加了一些新的登录功能,它破坏了它。所以我删除了代码。这是原始格式,但错误仍然存在,用户服务的create函数不是函数。我已经通读了很多关于这个话题的问题,但没有一个答案对我有帮助

UserController

todoApp.controller('UserController', ['Users','$scope', function UserController(Users, $scope) {
    console.log("in user controller");

    $scope.formModel = {};
    $scope.submitting = false;
    $scope.submitted = false;
    $scope.has_error = false;

    console.log($scope.formModel);
    $scope.createUser = function() {
        if(!$scope.registerForm.$valid) {
            return;
        }
        Users.create($scope.formModel)
        .success(function(data){

            $scope.submitting = false;
            $scope.submitted = true;
            $scope.has_error = false;
            $scope.formModel = {}; // clear the form so our user is ready to enter another
            $scope.users.push(data);
            console.log(":)");
        }).error(function(data) {
            console.log(":(");
            $scope.submitting = false;
            $scope.submitted = false;
            $scope.has_error = true;
        });


    };

}]);
user.sevice.js

todoApp.factory('Users', ['$http', function($http) {
    return {
        get: function() {
            return $http.get('/api/users');
        },

        create: function(userData) {
            console.log(userData);
            return $http.post('/api/users', userData);
        },

        delete: function(id) {
            return $http.delete('/api/users/' + id);
        },

        update: function(userData) {
            return $http.put('/api/users/' + userData.id, userData);
            console.log(userData);
        }
    }
}]);
register.html

<div class="container">

    <div class="row main"  ng-controller="UserController">
        <div class="main-login main-center">
        <h5>Sign up once for instant access.</h5>
            <form name="registerForm" ng-submit="createUser()"
                novalidate="novalidate"
                ng-hide="submitted" >

                <div class="form-group">
                    <label for="name" class="cols-sm-2 control-label">Your Name</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-user fa" aria-hidden="true"></i></span>
                            <input type="text" 
                                class="form-control" 
                                ng-model="formModel.name"
                                id="name"  
                                placeholder="Enter your Name"
                                required="required" />
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="email" class="cols-sm-2 control-label">Your Email</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-envelope fa" aria-hidden="true"></i></span>
                            <input type="email" 
                                class="form-control" 
                                ng-model="formModel.email"
                                id="email"  
                                placeholder="Enter your Email"
                                required="required" />
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="username" class="cols-sm-2 control-label">Username</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-users fa" aria-hidden="true"></i></span>
                            <input type="text" 
                                class="form-control" 
                                ng-model="formModel.username"
                                id="username"  
                                placeholder="Enter your Username"
                                required="required" />
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label for="password" class="cols-sm-2 control-label">Password</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-id-badge" aria-hidden="true"></i></span>
                            <input type="password" 
                                class="form-control" 
                                ng-model="formModel.password" 
                                id="password"  
                                placeholder="Enter your Password"
                                required="required" />
                        </div>
                    </div>
                </div>

                    <label for="confirm" class="cols-sm-2 control-label">Confirm Password</label>
                    <div class="cols-sm-10">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
                            <input type="password" 
                            class="form-control" 
                            name="confirm" 
                            id="confirm"  
                            placeholder="Confirm your Password"
                            required="required" />
                        </div>
                    </div>
                </div>

                <div class="form-group" >
                    <label for="type" class="cols-sm-2 control-label">User Type</label >
                    <div class="cols-sm-10">
                        <span class="input-group-addon"><i class="fa fa-university" aria-hidden="true"></i></span>
                        <select id="type"
                                        class="form-control"
                                        ng-model="formModel.role"
                                        required="required" >
                            <option value="" >Please Choose</option >
                            <option value="1" >Lecturer</option >
                            <option value="2" >Student</option >
                        </select >
                    </div>
                </div >
                <div>
                    <button class="btn btn-primary"
                            ladda="submitting"
                            data-style="expand-right"
                                type="submit">
                        <span ng-show="submitting">Registering</span>
                        <span ng-show="!submitting">Register</span>
                    </button>
                </div>        
            </form>
        </div>
    </div>
</div>

注册一次即可立即访问。
你的名字
你的电子邮件
用户名
暗语
确认密码
用户类型
请选择
讲师
大学生
登记
登记

如果上述代码正确,则代码中没有问题。 您可能缺少参考资料。 检查我的枪。您的代码进行调用,直到api被调用为止

我的砰砰声的控制台窗口

in user controller
VM413 app.js:11 Object {}__proto__: Object
VM413 app.js:13 create called!!
VM413 app.js:45 create method on factory called!!
VM413 app.js:46 Object {name: "Kalyan", email: "test@test.com", username: "tee", password: "tet", role: "1"}
VM411 angular.min.js:105 POST https://run.plnkr.co/api/users 400 ()

您应该返回带有值的回调,而不是从服务器返回HTTP原始承诺。试试这个

服务

create: function(userData, callback) {
      $http.post('/api/users', userData).then(function (res) {
            return callback(res.data); 
      }, 'error')
},
控制器

todoApp.controller('UserController', ['Users','$scope', function UserController(Users, $scope) {
    console.log("in user controller");

    $scope.formModel = {};
    $scope.submitting = false;
    $scope.submitted = false;
    $scope.has_error = false;

    console.log($scope.formModel);
    $scope.createUser = function() {
        if(!$scope.registerForm.$valid) {
            return;
        }
        Users.create($scope.formModel)
        .success(function(data){

            $scope.submitting = false;
            $scope.submitted = true;
            $scope.has_error = false;
            $scope.formModel = {}; // clear the form so our user is ready to enter another
            $scope.users.push(data);
            console.log(":)");
        }).error(function(data) {
            console.log(":(");
            $scope.submitting = false;
            $scope.submitted = false;
            $scope.has_error = true;
        });


    };

}]);
//对于Angular 1.5>

//从服务器返回成功代码(这不是像404和500这样的真实错误代码。这只是您从服务器提供的代码)-假设服务器返回json格式以获得成功-{code:'0000',备注:'Success'}和错误-{code:'9999',备注:'Success'}。这取决于您的服务器。这就是我在上一个项目中要做的

 $scope.createUser = function() {
    if(!$scope.registerForm.$valid) {
        return;
    }
    Users.create($scope.formModel, function (res) {
         switch (res.code) {
           case '0000':
               $scope.submitting = false;
               $scope.submitted = true;
               $scope.has_error = false;
               $scope.formModel = {}; // clear the form so our user is ready to enter another
               $scope.users.push(data);
        console.log(":)");
               break;
          case '9999': 
                console.log(":(");
                $scope.submitting = false;
                 $scope.submitted = false;
                $scope.has_error = true;
                console.log('error');
               break;
      }
    });
};
假设您的服务器不返回错误代码,只返回数据。你可以这样做

 $scope.createUser = function() {
    if(!$scope.registerForm.$valid) {
        return;
    }
    Users.create($scope.formModel, function (res) {
        if (res !== undefined) {          
               $scope.submitting = false;
               $scope.submitted = true;
               $scope.has_error = false;
               $scope.formModel = {}; // clear the form so our user is ready to enter another
               $scope.users.push(data);
        } else {
                console.log(":(");
                $scope.submitting = false;
                 $scope.submitted = false;
                $scope.has_error = true;
                console.log('error');
       }
      }
    });

那真是一种享受。很抱歉到现在还没有回复,但我问这个问题后就离开了电脑。另一方面,案例“xxxx”是否应该填写http响应号,如403或200,表示成功?这是一个成功案例,换句话说,仅适用于http响应200。在关闭http post之前,您可以在“error”中捕获另一个http错误代码。我对案例“0000”和案例“9999”的作用有点困惑。这是否意味着它捕获任何大于0000小于9999的http响应?我刚刚更新了上面的答案。请随时澄清您的困惑。谢谢,这现在更有意义了。这在您的plunker中肯定有效。什么样的参考文献也会被引用。