Угловые JS к отключению директив на основе условия
-
20-12-2019 - |
Вопрос
У меня есть страница формы, которая используется для формы 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;
..
}
.