Pergunta

Estou tendo uma página de formulário que é usada para adicionar e editar formulário.Então, na hora de adicionar dados ao formulário, preciso verificar se os dados de entrada estão duplicados ou não, então criei uma diretiva que irá verificar no banco de dados se os dados meteorológicos existem ou não.

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

na hora de adicionar novos dados funciona bem.mas no momento da edição também usando o mesmo formulário para que a diretiva unique-divid esteja em execução.Não quero que isso aconteça na página de edição

.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);
      })
    }
  }
});

Por favor, sugira uma solução: desative a diretiva ou interrompa a função scope.$watch no momento da edição.

Foi útil?

Solução

Você pode adicionar atributos adicionais ao campo de entrada indicando o tipo de ação do formulário (criar/editar) que ele está servindo?

Por exemplo:

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

Se o tipo de ação corresponder àquele que você deseja ignorar, basta retornar da função de vinculação.

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

Caso você não queira modificar o template, qual é a indicação no controlador ou escopo que poderia ser usada para distinguir entre novos e existentes divisionData?Você poderia usar essa propriedade como um sinalizador para retornar do unique-divid diretiva:

link: function(scope, elem, attr, ctrl) { 
  if (!scope.divisionData.isNew) return;
  ..
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top