একক ডিওএম উপাদান নিয়ে আপনার একাধিক নির্দেশনা রয়েছে এবং যেখানে তারা যে ক্রম প্রয়োগ করেছে সে ক্ষেত্রে আপনি priority
তাদের প্রয়োগের আদেশ দেওয়ার জন্য সম্পত্তিটি ব্যবহার করতে পারেন । উচ্চতর সংখ্যা প্রথমে চলে। ডিফল্ট অগ্রাধিকার 0 হয় যদি আপনি কোনও নির্দিষ্ট না করেন।
সম্পাদনা : আলোচনার পরে, এখানে সম্পূর্ণ কার্যক্ষম সমাধান। কীটি ছিল বৈশিষ্ট্যটি মুছে ফেলা : element.removeAttr("common-things");
এবং এটিও element.removeAttr("data-common-things");
(ব্যবহারকারীরা data-common-things
এইচটিএমএল-তে নির্দিষ্ট করেছেন)
angular.module('app')
.directive('commonThings', function ($compile) {
return {
restrict: 'A',
replace: false,
terminal: true, //this setting is important, see explanation below
priority: 1000, //this setting is important, see explanation below
compile: function compile(element, attrs) {
element.attr('tooltip', '{{dt()}}');
element.attr('tooltip-placement', 'bottom');
element.removeAttr("common-things"); //remove the attribute to avoid indefinite loop
element.removeAttr("data-common-things"); //also remove the same attribute with data- prefix in case users specify data-common-things in the html
return {
pre: function preLink(scope, iElement, iAttrs, controller) { },
post: function postLink(scope, iElement, iAttrs, controller) {
$compile(iElement)(scope);
}
};
}
};
});
ওয়ার্কিং প্লঙ্কার এখানে উপলব্ধ: http://plnkr.co/edit/Q13bUt?p= পূর্বরূপ দেখুন
বা:
angular.module('app')
.directive('commonThings', function ($compile) {
return {
restrict: 'A',
replace: false,
terminal: true,
priority: 1000,
link: function link(scope,element, attrs) {
element.attr('tooltip', '{{dt()}}');
element.attr('tooltip-placement', 'bottom');
element.removeAttr("common-things"); //remove the attribute to avoid indefinite loop
element.removeAttr("data-common-things"); //also remove the same attribute with data- prefix in case users specify data-common-things in the html
$compile(element)(scope);
}
};
});
ডেমো
কেন আমাদের সেট করতে হবে terminal: true
এবং priority: 1000
(একটি উচ্চ সংখ্যা) ব্যাখ্যা:
যখন ডিওএম প্রস্তুত থাকে, কৌণিক সমস্ত নিবন্ধিত নির্দেশাবলী সনাক্ত করতে এবং priority
এই নির্দেশাবলী একই উপাদানটিতে থাকে কিনা তার উপর ভিত্তি করে নির্দেশকে একের পর এক সংকলন করতে কৌতুক ডিওএম পদক্ষেপ গ্রহণ করে । আমরা আমাদের কাস্টম নির্দেশের অগ্রাধিকারটি একটি উচ্চ সংখ্যায় সেট করেছিলাম তা নিশ্চিত করার জন্য যে এটি প্রথমে সংকলন করা হবে এবং তার সাথে এই নির্দেশিকাটি সংকলিত হওয়ার পরে terminal: true
অন্যান্য নির্দেশাবলী বাদ দেওয়া হবে ।
যখন আমাদের কাস্টম নির্দেশিকাটি সংকলিত হয়, তখন এটি নির্দেশকে যুক্ত করে এবং নিজেই মুছে ফেলার মাধ্যমে উপাদানটি সংশোধন করে এবং all সমস্ত নির্দেশাবলী (বাদ দেওয়া হয়নি এমনগুলি সহ) সংকলন করতে ile সংকলন পরিষেবা ব্যবহার করে ।
যদি আমরা সেট না করি terminal:true
এবং priority: 1000
, আমাদের কাস্টম নির্দেশাবলীর আগে কিছু নির্দেশ সংকলিত হওয়ার সম্ভাবনা রয়েছে । এবং যখন আমাদের কাস্টম নির্দেশিকাটি <================================================================================================================================================================================================================ এটি অনির্দেশ্য আচরণের কারণ হবে বিশেষত যদি আমাদের কাস্টম নির্দেশাবলীর পূর্বে সংকলিত নির্দেশাবলী ইতিমধ্যে ডিওমে রূপান্তরিত হয়।
অগ্রাধিকার এবং টার্মিনাল সম্পর্কে আরও তথ্যের জন্য , নির্দেশের "টার্মিনাল" কীভাবে বুঝতে হবে তা পরীক্ষা করে দেখুন ?
টেমপ্লেটটিও সংশোধন করে এমন একটি নির্দেশিকার উদাহরণ হ'ল ng-repeat
(অগ্রাধিকার = 1000), যখন ng-repeat
সংকলন করা হয়, ng-repeat
অন্যান্য নির্দেশাবলীর প্রয়োগ হওয়ার আগে টেমপ্লেট উপাদানটির অনুলিপি তৈরি করুন ।
@ ইজহাকির মন্তব্যে ধন্যবাদ, এখানে ngRepeat
উত্স কোডের রেফারেন্স দেওয়া হয়েছে : https://github.com/angular/angular.js/blob/master/src/ng/directive/ngRepeat.js
RangeError: Maximum call stack size exceeded
এটি চিরতরে সংকলন হিসাবে চলে।