سؤال

لدي صفحة نموذج تُستخدم لكل من نموذج الإضافة والتحرير.لذلك، في وقت إضافة البيانات إلى النموذج، أحتاج إلى التحقق من أن بيانات الإدخال مكررة أم لا، لذلك قمت بإنشاء توجيه سيتحقق من وجود بيانات الطقس في قاعدة البيانات أم لا.

<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 في وقت التحرير.

هل كانت مفيدة؟

المحلول

هل يمكنك إضافة سمة إضافية إلى حقل الإدخال تشير إلى نوع إجراء النموذج (إنشاء/تحرير) الذي يخدمه؟

على سبيل المثال:

<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;
  ..
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top