我有以下电子邮件字段,用于获取电子邮件的用户输入。输入电子邮件并从字段中删除焦点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 /猫鼬
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);
});
});
答案 0 :(得分:0)
如果未收到电子邮件,则data
的值为null
,typeof data
为String
。
它之前没有工作的原因是因为if(data == null)
总是变成false
。
if(data == 'null')
让事情正常运作。