检查AgualrJS中验证的指令 - $ scope未定义错误

时间:2013-10-21 22:01:46

标签: angularjs

当我尝试在我的“名称”字段上进行服务器端验证时,通过添加一个指令:

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

2 个答案:

答案 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);
   }
});