当我尝试在我的“名称”字段上进行服务器端验证时,通过添加一个指令:
app.directive('uniqueName', function($http) {
var toId;
return {
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
scope.$watch(attr.ngModel, function(value) {
$http.get('/rest/isUerExist/' + value).success(function(data) {
//set the validity of the field
$scope.$apply(function(s) {
ctrl.$setValidity('uniqueName', data);
});
});
})
}
}
});
为什么它会在控制台中返回“$ scope未定义”消息?
更新
如果我使用“范围”。但不是“$ scope。”,那么我在控制台中有不同的错误:
错误:$ digest已在进行中
答案 0 :(得分:2)
您已将其注入范围,而不是$ scope。只需将其更改为scope.$apply
答案 1 :(得分:0)
确定。关于我的第二个问题:
来自doc:
$ apply()用于从JavaScript
输入Angular执行上下文请记住,在大多数地方(控制器,服务)$ apply都有 已经由处理该指令的指令调用了你 事件
所以,这让我认为我不需要:$scope.$apply(function(s) {
然后我的代码看起来像这样(并按预期工作):
$http.get('/rest/isUerExist/' + value).success(function(data) {
//set the validity of the field
if (data == "true") {
ctrl.$setValidity('uniqueName', false);
} else if (data == "false") {
ctrl.$setValidity('uniqueName', true);
}
});