我有一个表单页面,用于添加和编辑表单。所以在将数据添加到表单时,我需要检查输入数据是否重复,因此我创建了一个指令,它将检查数据库是否存在天气数据。
<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功能。
答案 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;
..
}