নোংরা $scope
বস্তু যাচাই করে
কৌণিক বস্তুগুলিতে একটি সাধারণ array
পর্যবেক্ষক বজায় রাখে $scope
। যদি আপনি কোন পরিদর্শন তাহলে $scope
আপনি দেখবেন যে এটি একটি রয়েছে array
নামক $$watchers
।
প্রতিটি প্রহরী এমন একটি object
যা অন্যান্য জিনিসের সাথে থাকে
- এমন একটি অভিব্যক্তি যা পর্যবেক্ষক নিরীক্ষণ করছেন। এটি কেবল একটি
attribute
নাম বা আরও জটিল কিছু হতে পারে ।
- এক্সপ্রেশনটির একটি সর্বশেষ জ্ঞাত মান। এটি এক্সপ্রেশনটির বর্তমান গণিত মানের বিপরীতে চেক করা যায়। যদি মানগুলি পৃথক হয় তবে পর্যবেক্ষকটি ফাংশনটি ট্রিগার করবে এবং
$scope
মলিন হিসাবে চিহ্নিত করবে ।
- এমন একটি ফাংশন যা পর্যবেক্ষক মলিন হলে কার্যকর করা হবে।
পর্যবেক্ষকরা কীভাবে সংজ্ঞায়িত হয়
অ্যাঙ্গুলারজেএস-এ কোনও প্রহরীকে সংজ্ঞায়িত করার বিভিন্ন উপায় রয়েছে।
আপনি স্পষ্টভাবে $watch
একটি attribute
চালু করতে পারেন $scope
।
$scope.$watch('person.username', validateUnique);
আপনি {{}}
আপনার টেম্পলেটটিতে একটি বিভাজন রাখতে পারেন (বর্তমানের জন্য আপনার জন্য একজন প্রহরী তৈরি করা হবে $scope
)।
<p>username: {{person.username}}</p>
আপনি কোনও নির্দেশিকা যেমন ng-model
আপনার জন্য প্রহরীকে সংজ্ঞায়িত করতে চাইতে পারেন ।
<input ng-model="person.username" />
$digest
চক্র তাদের শেষ মান বিরুদ্ধে সব প্রহরী পরীক্ষা
যখন আমরা সাধারণ চ্যানেলগুলির (এনজি-মডেল, এনজি-রিপিট, ইত্যাদি) মাধ্যমে অ্যাংুলারজেএসের সাথে যোগাযোগ করি তখন একটি ডাইজেস্ট চক্র নির্দেশের মাধ্যমে ট্রিগার করা হবে।
একটি ডাইজেস্ট চক্র এবং তার সমস্ত শিশুদের গভীরতার প্রথম ট্র্যাভারসাল$scope
। প্রত্যেকের জন্য $scope
object
, আমরা এর উপর পুনরাবৃত্তি করি $$watchers
array
এবং সমস্ত এক্সপ্রেশন মূল্যায়ন করি। যদি নতুন এক্সপ্রেশন মানটি সর্বশেষ জ্ঞাত মান থেকে পৃথক হয়, তবে পর্যবেক্ষকের ফাংশনটি বলা হয়। এই ফাংশনটি ডমটির কিছু অংশ পুনরায় সংকলন করতে পারে, একটি মান পুনর্নির্মাণ করতে পারে $scope
, ট্রিগার AJAX
request
করতে পারে, আপনার যা কিছু করার প্রয়োজন তা হচ্ছে।
প্রতিটি ক্ষেত্র অতিক্রম করা হয় এবং প্রতিটি ঘড়ির অভিব্যক্তি মূল্যায়িত হয় এবং শেষ মানেরটির বিপরীতে পরীক্ষিত হয়।
যদি কোনও নজরদারি ট্রিগার করা হয় তবে $scope
তা নোংরা
যদি কোনও প্রহরীকে ট্রিগার করা হয় তবে অ্যাপটি জানে যে কিছু পরিবর্তন হয়েছে এবং $scope
এটিকে নোংরা হিসাবে চিহ্নিত করা হয়েছে।
প্রহরী ফাংশনগুলি $scope
পিতামাতার উপর বা তার অন্যান্য বৈশিষ্ট্যগুলিকে পরিবর্তন করতে পারে $scope
। যদি একটি $watcher
ফাংশন ট্রিগার করা হয়ে থাকে তবে আমরা গ্যারান্টি দিতে পারি না যে আমাদের অন্যান্য $scope
গুলি এখনও পরিষ্কার আছে এবং তাই আমরা পুরো ডাইজেস্ট চক্রটি আবার কার্যকর করি।
এটি কারণ AngularJS এর দ্বিমুখী বাইন্ডিং রয়েছে তাই $scope
গাছটিকে ব্যাক আপ করে ডেটা পাঠানো যেতে পারে । আমরা $scope
ইতিমধ্যে হজম হয়ে গেছে এমন একটি উচ্চতার কোনও মান পরিবর্তন করতে পারি । সম্ভবত আমরা একটি মান পরিবর্তন $rootScope
।
যদি $digest
নোংরা হয়, আমরা $digest
আবার পুরো চক্রটি কার্যকর করি
$digest
ডাইজেস্ট চক্রটি পরিষ্কার না হওয়া পর্যন্ত আমরা ক্রমাগতভাবে চক্রটি লুপ করি (সমস্ত $watch
এক্সপ্রেশনগুলি পূর্ববর্তী চক্রের মতো একই মানের থাকে), বা আমরা ডাইজেস্ট সীমাতে পৌঁছে যাই। ডিফল্টরূপে, এই সীমাটি 10 এ সেট করা আছে।
আমরা যদি ডাইজেস্ট সীমাতে পৌঁছে যাই তবে AngularJS কনসোলে একটি ত্রুটি বাড়িয়ে তুলবে:
10 $digest() iterations reached. Aborting!
ডাইজেস্ট মেশিনে শক্ত তবে বিকাশকারীদের পক্ষে সহজ
যেমন আপনি দেখতে পাচ্ছেন, প্রতিবারই একটি কৌণিক জেএস অ্যাপ্লিকেশনে কিছু পরিবর্তন হওয়ার সাথে সাথে অ্যাঙ্গুলারজেএস $scope
কীভাবে প্রতিক্রিয়া জানাবে তা দেখতে শ্রেণিবদ্ধের প্রতিটি পর্যবেক্ষককে পরীক্ষা করবে । একজন বিকাশকারীর জন্য এটি একটি বিশাল উত্পাদনশীলতার वरदान, এখন আপনার প্রায় কোনও ওয়্যারিং কোড লেখার দরকার নেই, অ্যাঙ্গুলারজেএস কেবল মানটি পরিবর্তিত হয়েছে কিনা তা লক্ষ্য করবে এবং অ্যাপটির বাকী অংশটি পরিবর্তনের সাথে সামঞ্জস্য করবে।
মেশিনের দৃষ্টিকোণ থেকে যদিও এটি বুনোভাবে অদক্ষ এবং এটি আমাদের অ্যাপ্লিকেশনটিকে ধীর করে দিবে যদি আমরা খুব বেশি পর্যবেক্ষক তৈরি করি। পুরানো ব্রাউজারগুলিতে আপনার অ্যাপ্লিকেশনটি ধীরে ধীরে অনুভূত হওয়ার আগে মিসকো প্রায় 4000 পর্যবেক্ষকের একটি চিত্র উদ্ধৃত করেছেন।
উদাহরণস্বরূপ আপনি যদি ng-repeat
বৃহত্তর বেশি হন তবে এই সীমাটি পৌঁছানো সহজ JSON
array
। আপনি প্রহরী তৈরি না করে কোনও টেমপ্লেট সংকলন করতে ওয়ান-টাইম বাইন্ডিংয়ের মতো বৈশিষ্ট্যগুলি ব্যবহার করে এর বিরুদ্ধে প্রশমিত করতে পারেন।
কীভাবে খুব বেশি পর্যবেক্ষক তৈরি করা এড়ানো যায়
প্রতিবার আপনার ব্যবহারকারী আপনার অ্যাপ্লিকেশনটির সাথে যোগাযোগ করে, আপনার অ্যাপ্লিকেশনটির প্রতিটি একক পর্যবেক্ষক কমপক্ষে একবার মূল্যায়ন করা হবে। অ্যাংুলারজেএস অ্যাপ্লিকেশনটি অনুকূলকরণের একটি বড় অংশ আপনার $scope
গাছের পর্যবেক্ষকদের সংখ্যা হ্রাস করছে । এটি করার একটি সহজ উপায় হ'ল ওয়ান টাইম বাইন্ডিং ।
যদি আপনার কাছে এমন ডেটা থাকে যা খুব কমই পরিবর্তিত হয়, আপনি কেবল :: সিনট্যাক্স ব্যবহার করে একবার এটি আবদ্ধ করতে পারেন, এর মতো:
<p>{{::person.username}}</p>
অথবা
<p ng-bind="::person.username"></p>
অন্তর্ভুক্ত টেমপ্লেটটি যখন রেন্ডার করা হয় এবং ডেটা লোড করা হয় তখনই বাইন্ডিংটি ট্রিগার করা হবে $scope
।
এটি বিশেষত গুরুত্বপূর্ণ যখন আপনার ng-repeat
অনেকগুলি আইটেম থাকে।
<div ng-repeat="person in people track by username">
{{::person.username}}
</div>