Pregunta

Tengo una página de formulario que se utiliza tanto para agregar como para editar formularios.Entonces, al momento de agregar datos al formulario, necesito verificar que los datos de entrada estén duplicados o no, así que creé una directiva que verificará con la base de datos si los datos meteorológicos existen o no.

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

al momento de agregar nuevos datos, funciona bien.pero en el momento de la edición también se usa el mismo formulario, por lo que se ejecuta la directiva de división única.No quiero que esto suceda en la página de edición.

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

Sugiera una solución, ya sea deshabilitar la directiva o detener la función alcance.$watch en el momento de la edición.

¿Fue útil?

Solución

¿Puede agregar un atributo adicional al campo de entrada que indique el tipo de acción del formulario (crear/editar) que está entregando?

Por ejemplo:

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

Si el tipo de acción coincide con el que desea ignorar, simplemente regrese de la función de vinculación.

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

En caso de que no desee modificar la plantilla, ¿cuál es la indicación en el controlador o alcance que podría usarse para distinguir entre lo nuevo y lo existente? divisionData?Podrías usar esa propiedad como bandera para regresar del unique-divid directiva:

link: function(scope, elem, attr, ctrl) { 
  if (!scope.divisionData.isNew) return;
  ..
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top