条件に基づく指令を無効にするための角度JS
-
20-12-2019 - |
質問
私はフォームの追加と編集の両方に使用されるフォームページを持っています。そのため、データをフォームに追加する際には、入力データが重複しているかどうかを確認する必要があるため、データベースの天気データに確認するディレクティブを作成しました。
<input name="divId" type="text" class="form-control fL w250" ng-model="divisionData.DivisionID" ng-disabled="Disabled()" unique-divid required /></div>
.
新しいデータを追加する際にはうまくいきます。しかし、編集時にも同じ形式を使用してユニークな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関数
解決
入力フィールドに追加の属性を追加することができます。
例えば:
<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;
..
}
. 所属していません StackOverflow