হালনাগাদ:
একই কার্যকারিতা সহ পূর্ববর্তী নির্দেশকের (দুটি পরিবর্তে একটির) উন্নত ও সরলিকৃত সংস্করণ:
.directive('myTestExpression', ['$parse', function ($parse) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
var expr = attrs.myTestExpression;
var watches = attrs.myTestExpressionWatch;
ctrl.$validators.mytestexpression = function (modelValue, viewValue) {
return expr == undefined || (angular.isString(expr) && expr.length < 1) || $parse(expr)(scope, { $model: modelValue, $view: viewValue }) === true;
};
if (angular.isString(watches)) {
angular.forEach(watches.split(",").filter(function (n) { return !!n; }), function (n) {
scope.$watch(n, function () {
ctrl.$validate();
});
});
}
}
};
}])
ব্যবহারের উদাহরণ:
<input ng-model="price1"
my-test-expression="$model > 0"
my-test-expression-watch="price2,someOtherWatchedPrice" />
<input ng-model="price2"
my-test-expression="$model > 10"
my-test-expression-watch="price1"
required />
ফলাফল: পারস্পরিক নির্ভরশীল পরীক্ষার এক্সপ্রেশন যেখানে অন্যের নির্দেশিকা মডেল এবং বর্তমান মডেল পরিবর্তনের জন্য বৈধতা কার্যকর করা হয়।
টেস্ট এক্সপ্রেশন স্থানীয় $model
ভেরিয়েবল যা আপনি এটি অন্যান্য ভেরিয়েবলের সাথে তুলনা করতে ব্যবহার করা উচিত।
পূর্বে:
আমি অতিরিক্ত নির্দেশিকা যুক্ত করে @ প্লান্টফেস কোড উন্নত করার চেষ্টা করেছি। একাধিক এনজিমোডেল ভেরিয়েবলের পরিবর্তনগুলি যখন করা হয় তখন আমাদের এক্সপ্রেশনটি কার্যকর করা দরকার হলে এই অতিরিক্ত নির্দেশিকাটি খুব কার্যকর।
.directive('ensureExpression', ['$parse', function($parse) {
return {
restrict: 'A',
require: 'ngModel',
controller: function () { },
scope: true,
link: function (scope, element, attrs, ngModelCtrl) {
scope.validate = function () {
var booleanResult = $parse(attrs.ensureExpression)(scope);
ngModelCtrl.$setValidity('expression', booleanResult);
};
scope.$watch(attrs.ngModel, function(value) {
scope.validate();
});
}
};
}])
.directive('ensureWatch', ['$parse', function ($parse) {
return {
restrict: 'A',
require: 'ensureExpression',
link: function (scope, element, attrs, ctrl) {
angular.forEach(attrs.ensureWatch.split(",").filter(function (n) { return !!n; }), function (n) {
scope.$watch(n, function () {
scope.validate();
});
});
}
};
}])
ক্রস বৈধতাযুক্ত ক্ষেত্রগুলি তৈরি করতে এটি কীভাবে ব্যবহার করবেন তা উদাহরণ:
<input name="price1"
ng-model="price1"
ensure-expression="price1 > price2"
ensure-watch="price2" />
<input name="price2"
ng-model="price2"
ensure-expression="price2 > price3"
ensure-watch="price3" />
<input name="price3"
ng-model="price3"
ensure-expression="price3 > price1 && price3 > price2"
ensure-watch="price1,price2" />
ensure-expression
যখন ng-model
বা কোনও ensure-watch
ভেরিয়েবল পরিবর্তন করা হয় তখন মডেলটিকে বৈধতা দিতে কার্যকর করা হয়।