Вопрос

У меня есть страница формы, которая используется для формы Add, так и для редактирования.Таким образом, во время добавления данных в форму мне необходимо проверить входные данные дублировать или нет, поэтому я создал Директиву, которая проверит данные базовыми данными, существуют или нет.

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

На момент добавления новых данных его работает нормально.Но во время редактирования также используют ту же форму, поэтому уникальная директива выполняется.Я не хочу, чтобы это произошло в странице редактирования

.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 Function во время редактирования.

Это было полезно?

Решение

Можете ли вы добавить дополнительный атрибут в поле ввода, указывающие тип действия формы (CREATE / EDIT), он служит?

Например:

<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:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top