【发布时间】:2014-12-29 14:54:51
【问题描述】:
我有以下电子邮件字段用于接收用户输入的电子邮件。一旦输入了电子邮件并且焦点从ng-blur字段中移开,就会触发检查用户输入的电子邮件是否已被使用的功能:
<input type="email" class="form-control" placeholder="" ng-model="email" name="email" required ng-blur="isFound(email)">
为了显示错误,我有以下跨度:
<span class="help-block error" ng-show="blurred && isTaken">Email is taken already</span>
这里是函数isFound(email):
$scope.isFound = function(email) {
service.isEmailTaken(email).then(function(data) {
console.log(data); //this shows either null or the returned data
$scope.blurred = true;
if(data == null) {
$scope.isTaken = false;
} else {
$scope.isTaken = true;
}
});
}
现在,当我尝试接收已被占用的电子邮件时,它会正确显示消息。但在那之后,即使我输入了未被接收的电子邮件,它仍然显示与Email is taken already相同的消息。
有人可以帮我理解它发生的原因以及如何解决它吗?
编辑 - 在下面添加 AngularJS 和 NodeJS/ExpressJS/Mongoose 代码:
AngularJS
factory.isEmailTaken = function(email) {
return $http({url: "/api/queries/email/" + email, method: "GET"}).then(function(resp) {
return resp.data;
});
};
ExpressJS/NodeJS/Mongoose
app.get('/api/queries/email/:email', function (req, res) {
Query.findOne({email: req.params.email}, function (err, query) {
if (err)
res.send(err);
res.json(query);
});
});
【问题讨论】:
-
您是否检查过您的服务器是否返回了正确的数据?我认为您发布的代码没有任何问题(除了我没有看到服务代码)。
-
if(data == null)??您肯定会从服务器发送响应 -
@DennisRongo:是的,当电子邮件尚未被接收时,我会得到
null,而当电子邮件已经被接收时,我会得到正确的非空数据。我只是无法让它正常工作。我不知道自己犯了什么错误。 -
@charlietfl:是的,我用
console.log(data)检查从服务器返回的数据。 -
你能发布你的 Angular 服务代码吗?
标签: angularjs node.js email express mongoose