Angular js根据条件禁用指令

时间:2014-06-03 06:44:49

标签: javascript angularjs angularjs-directive angularjs-scope

我有一个表单页面,用于添加和编辑表单。所以在将数据添加到表单时,我需要检查输入数据是否重复,因此我创建了一个指令,它将检查数据库是否存在天气数据。

<input name="divId" type="text" class="form-control fL w250"   ng-model="divisionData.DivisionID"  ng-disabled="Disabled()" unique-divid required /></div>

在添加新数据时,它的工作正常。但在编辑时也使用相同的形式,因此unique-divid指令正在运行。我不希望在编辑页面中发生这种情况

.directive('uniqueDivid', function($http) {
  var toId;
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, elem, attr, ctrl) { 
     scope.$watch(attr.ngModel, function(value) {
        if(toId) clearTimeout(toId);
        toId = setTimeout(function(){
          console.log(value);
            $http({
            method  : 'POST',
            url     : 'http://testurl',
            data    : $.param({'DivisionID' : value}), 
            headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  
        })
            .success(function(data) {
                console.log(data);
                if(data.status == 'success'){
                    ctrl.$setValidity('uniqueDivid', true);
                }else if(data.status == 'fail'){
                    ctrl.$setValidity('uniqueDivid', false);
                }
                if (!data.success) {
                } else {
                }
            });


        }, 200);
      })
    }
  }
});

请建议解决方案是禁用指令或停止范围。编辑时的$ watch功能。

1 个答案:

答案 0 :(得分:1)

您是否可以在输入字段中添加其他属性,以指示其所服务的表单操作类型(创建/编辑)?

例如:

<input name="divId" type="text" class="form-control fL w250" ng-model="divisionData.DivisionID" ng-disabled="Disabled()" unique-divid form-action="edit" required />

如果操作类型与您要忽略的操作类型匹配,则只需从链接功能返回。

link: function(scope, elem, attr, ctrl) { 
  if (attr.formAction === "edit") return;
  ..
}

如果您不想修改模板,控制器或范围中可用于区分新divisionData的指示是什么?您可以使用该属性作为标志从unique-divid指令返回:

link: function(scope, elem, attr, ctrl) { 
  if (!scope.divisionData.isNew) return;
  ..
}