我正在向Node发送一个AJAX请求,如果某个字段在MongoDB数据库中不是唯一的,则返回“true”,即找到该字段和值的对象,如果没有找到对象,则返回“false” 。这是路线回调:
exports.check = function(req, res) {
var query = {};
query[req.body.field] = req.body.value;
console.log(query);
Invoice.findOne(query, function(err, invoice) {
if (err) {
res.send(err);
} else {
if (invoice) {
res.send(true);
} else {
res.send(false);
}
}
});
};
(旁注:如果对res.send
的使用完全不合适,请纠正我,让我知道应该使用什么)
这是Angular指令:
app.directive('ngUnique', ['$http', function ($http) {
return {
require: 'ngModel',
scope: {
ngModel: '@',
},
link: function (scope, elem, attrs, ctrl) {
elem.on('blur', function () {
scope.$apply(function () {
var val = elem.val();
var data = {
'field': scope.ngModel,
'value': val
};
$http.post('/invoices/check', data).then(function(res) {
console.log(res.data);
console.log(ctrl.$error);
ctrl.$setValidity('exists', res.data);
console.log(res.data);
console.log(ctrl.$error);
});
});
});
}
};
}
]);
控制台日志输出很奇怪(这是我输入以前使用的值时,即res.data
应为true
):
true // res.data before ctrl.$setValidity
Object {} // ctrl.$error before ctrl.$setValidity
true // res.data again
Object {exists: false} // ctrl.$error after ctrl.$setValidity('exists', res.data)
我无法理解为什么会这样。我一开始以为$ setValidity根本没有执行,但日志显示不然。那么,为什么它设定了不同的价值呢?我错过了什么吗?这是范围问题吗?
答案 0 :(得分:1)
$ error对象存储传递给$ setValidity的isValid参数的反转。调用$ setValidity时,传入的值为true。然后$ error对象将该值的值存储为该键,以指示没有错误。
https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1638