Javascript TypeError:Users.create不是一个函数
我的代码运行良好。我添加了一些新的登录功能,它破坏了它。所以我删除了代码。这是原始格式,但错误仍然存在,用户服务的create函数不是函数。我已经通读了很多关于这个话题的问题,但没有一个答案对我有帮助 UserControllerJavascript 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")
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中肯定有效。什么样的参考文献也会被引用。