අපිරිසිදු $scopeවස්තුව පරීක්ෂා කිරීමෙන්
කෝණික arrayමඟින් $scopeවස්තූන්හි මුරකරුවන් සරල ලෙස පවත්වා ගනී . ඔබ කිසියම් දෙයක් පරීක්ෂා කළහොත් $scopeඑහි arrayඇමතුමක් ඇති බව ඔබට පෙනී යනු $$watchersඇත.
සෑම මුරකරුවෙකුම objectවෙනත් දේ අතර අඩංගු වේ
- මුරකරු නිරීක්ෂණය කරන ප්රකාශනයකි. මෙය
attributeනමක් හෝ වඩාත් සංකීර්ණ දෙයක් විය හැකිය.
- ප්රකාශනයේ අවසාන දන්නා වටිනාකම. ප්රකාශනයේ වත්මන් ගණනය කළ අගයට සාපේක්ෂව මෙය පරීක්ෂා කළ හැකිය. අගයන් වෙනස් නම් මුරකරු ශ්රිතය අවුලුවන අතර එය
$scopeඅපිරිසිදු ලෙස සලකුණු කරයි .
- මුරකරු අපිරිසිදු නම් එය ක්රියාත්මක කරනු ඇත.
මුරකරුවන් නිර්වචනය කරන්නේ කෙසේද
AngularJS හි මුරකරුවෙකු අර්ථ දැක්වීමට විවිධ ක්රම තිබේ.
ඔබ සුවිශේෂව හැකි $watchවූ attributeමත $scope.
$scope.$watch('person.username', validateUnique);
{{}}ඔබේ අච්චුව තුළ ඔබට අන්තර් සම්බන්ධතාවයක් තැබිය හැකිය (ධාරාව මත ඔබ වෙනුවෙන් මුරකරුවෙකු නිර්මාණය වනු ඇත $scope).
<p>username: {{person.username}}</p>
ඔබ ng-modelවෙනුවෙන් මුරකරු නිර්වචනය කිරීම වැනි නියෝගයක් ඉල්ලා සිටිය හැකිය .
<input ng-model="person.username" />
මෙම $digestචක්රය ඔවුන්ගේ අවසන් අගය එරෙහි සියලු නිරීක්ෂකයෝ පරික්ෂා
අපි සාමාන්ය නාලිකා (ng-model, ng-පුනරාවර්තනය, ආදිය) හරහා AngularJS සමඟ අන්තර්ක්රියා කරන විට, ඩයිජෙස්ට් චක්රයක් නියෝගයෙන් අවුලුවනු ඇත.
ඩයිජෙස්ට් චක්රයක් යනු එහි පළමු $scopeහා එහි සියලු දරුවන්ගේ ගැඹුරට ගමන් කිරීමයි . එක් එක් සඳහා $scope object, අපි එය ඉක්මවා නැවත $$watchers arrayසියලු ප්රකාශන ඇගයීමට ලක් කරමු. නව ප්රකාශන අගය අවසන් වරට දන්නා අගයට වඩා වෙනස් නම්, මුරකරුගේ ශ්රිතය හැඳින්වේ. මෙම ශ්රිතය DOM හි කොටසක් නැවත සකස් කිරීම, වටිනාකමක් නැවත ගණනය කිරීම $scope, AJAX requestඔබට අවශ්ය ඕනෑම දෙයක් අවුලුවාලීම .
සෑම විෂය පථයක්ම ගමන් කරන අතර සෑම ඔරලෝසු ප්රකාශනයක්ම අවසාන අගයට සාපේක්ෂව ඇගයීමට ලක් කරනු ලැබේ.
මුරකරුවෙකු අවුලුවනු ලැබුවහොත් $scopeඑය අපිරිසිදු ය
මුරකරුවෙකු අවුලුවනු ලැබුවහොත්, යමක් වෙනස් වී ඇති බව යෙදුම දනී, $scopeඑය අපිරිසිදු ලෙස සලකුණු කර ඇත.
මුරකරුගේ ක්රියාකාරිත්වයන් $scopeදෙමව්පියන් මත හෝ වෙනත් ගුණාංග වෙනස් කළ හැකිය $scope. එක් $watcherශ්රිතයක් අවුලුවනු ලැබුවහොත් , අපගේ අනෙක් $scopeඒවා තවමත් පිරිසිදු බව අපට සහතික කළ නොහැක , එබැවින් අපි සම්පූර්ණ ඩයිජස්ට් චක්රය නැවත ක්රියාත්මක කරමු.
මෙයට හේතුව AngularJS සතුව ද්වි-මාර්ග බන්ධනයක් ඇති බැවින් දත්ත නැවත $scopeගස වෙත යැවිය හැකිය . $scopeදැනටමත් ජීර්ණය කර ඇති ඉහළ අගයක් අපි වෙනස් කළ හැකිය . සමහර විට අපි එහි අගය වෙනස් කරමු $rootScope.
නම් $digestඅපිරිසිදු වන අතර, අපි මුළු ක්රියාත්මක $digestනැවත චක්රය
$digestඩයිජෙස්ට් චක්රය පිරිසිදුව පැමිණෙන තෙක් අපි නොකඩවා චක්රය හරහා ගමන් කරන්නෙමු (සියලුම $watchප්රකාශනවල පෙර චක්රයේ තිබූ අගයට සමාන අගයක් ඇත), නැතහොත් අපි ජීර්ණ සීමාවට ළඟා වෙමු. පෙරනිමියෙන්, මෙම සීමාව 10 ලෙස සකසා ඇත.
අප ජීර්ණ සීමාවට ළඟා වුවහොත් AngularJS කොන්සෝලය තුළ දෝෂයක් මතු කරයි:
10 $digest() iterations reached. Aborting!
ඩයිජෙස්ට් යන්ත්රය අමාරු නමුත් සංවර්ධකයාට පහසුය
ඔබට පෙනෙන පරිදි, AngularJS යෙදුමක යම් දෙයක් වෙනස් වන සෑම අවස්ථාවකම, AngularJS විසින් $scopeධූරාවලියේ සෑම මුරකරුවෙකුම පරීක්ෂා කර ප්රතිචාර දක්වන්නේ කෙසේදැයි බැලීමට. සංවර්ධකයෙකු සඳහා මෙය දැවැන්ත tivity ලදායිතා වරප්රසාදයක් වන අතර, ඔබට දැන් රැහැන් කේතයක් ලිවීමට අවශ්ය නොවන බැවින්, අගයක් වෙනස් වී ඇත්දැයි AngularJS විසින් දකිනු ඇති අතර ඉතිරි යෙදුම වෙනස්වීමට අනුකූල වේ.
යන්ත්රයේ දෘෂ්ටි කෝණයෙන් බැලූ විට මෙය එතරම් අකාර්යක්ෂම වන අතර අප ඕනෑවට වඩා මුරකරුවන් නිර්මාණය කළහොත් අපගේ යෙදුම මන්දගාමී වනු ඇත. ඔබගේ යෙදුම පැරණි බ්රව්සර්වල මන්දගාමී බවක් දැනීමට පෙර මිස්කෝ මුරකරුවන් 4000 ක් පමණ උපුටා දක්වා ඇත.
උදාහරණයක් ලෙස ඔබ ng-repeatවිශාල ප්රමාණයක් ඉක්මවා ගියහොත් මෙම සීමාව ළඟා වීම පහසුය JSON array. මුරකරුවන් නිර්මාණය නොකර අච්චුවක් සම්පාදනය කිරීම සඳහා එක් වරක් බැඳීම වැනි අංග භාවිතා කරමින් ඔබට මෙය අවම කර ගත හැකිය.
ඕනෑවට වඩා මුරකරුවන් ඇතිවීම වළක්වා ගන්නේ කෙසේද
ඔබගේ පරිශීලකයා ඔබගේ යෙදුම සමඟ අන්තර්ක්රියා කරන සෑම අවස්ථාවකම, ඔබගේ යෙදුමේ සෑම මුරකරුවෙකුම අවම වශයෙන් එක් වරක්වත් ඇගයීමට ලක් කරනු ඇත. AngularJS යෙදුමක් ප්රශස්තිකරණය කිරීමේ විශාල කොටසක් වන්නේ ඔබේ $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>