0

当我尝试通过添加指令对“名称”字段进行服务器端验证时:

 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 已经在进行中

4

2 回答 2

2

您已将其作为范围注入,而不是 $scope。只需将其更改为scope.$apply

于 2013-10-21T22:04:34.353 回答
0

好的。关于我的第二个问题:

来自文档:

$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);
   }
});
于 2013-10-22T14:29:35.603 回答