সংক্ষিপ্ত উত্তর : আপনার কি সত্যিই এই জাতীয় ফাংশন প্রয়োজন বা আপনি সম্পত্তি ব্যবহার করতে পারেন? http://jsfiddle.net/awnqm/1/
দীর্ঘ উত্তর
সরলতার জন্য আমি কেবল আপনার ক্ষেত্রে বর্ণনা করব - এনজি অবজেক্টের অ্যারে জন্য। এছাড়াও, আমি কিছু বিবরণ বাদ দেব।
অ্যাঙ্গুলারজেএস পরিবর্তনগুলি সনাক্ত করার জন্য নোংরা চেকিং ব্যবহার করে। যখন আবেদন শুরু হয় এটা রান $digestজন্য $rootScope। স্কোপের শ্রেণিবিন্যাসের$digest জন্য গভীরতার প্রথম ট্রভারসাল করবে । সমস্ত স্কোপের ঘড়ির তালিকা রয়েছে। প্রতিটি ঘড়ির শেষ মান হয় (শুরুতে )। সমস্ত ঘড়ির জন্য প্রতিটি স্কোপ এটি চালায়, বর্তমান মান ( ) পায় এবং এটির সাথে তুলনা করে । যদি বর্তমান মান সমান হয় না (সর্বদা প্রথম তুলনার জন্য) সেট করে । সমস্ত স্কোপগুলি প্রক্রিয়া করা হয় যদি থেকে অন্য গভীরতার-প্রথম ট্র্যাভারসাল শুরু হয় । নোংরা == মিথ্যা বা ট্র্যাভারসেলের সংখ্যা == 10 শেষ হয় যখন "10 $ ডাইজেস্ট () পুনরাবৃত্তির ত্রুটি পৌঁছেছে" " লগ করা হবেinitWatchVal$digestwatch.get(scope)watch.lastwatch.last$digestdirtytruedirty == true $digest$rootScope$digest
এখন সম্পর্কে ngRepeat। প্রতিটি watch.getকলের জন্য এটি getEntitiesক্যাশে ( HashQueueMapবাই দ্বারা hashKey) অতিরিক্ত তথ্য সহ সংগ্রহের (ফেরতের মান ) থেকে বস্তুগুলি সঞ্চয় করে । প্রতিটি watch.getকলের ngRepeatজন্য hashKeyক্যাশে থেকে এর মাধ্যমে বস্তু পাওয়ার চেষ্টা করে । যদি এটি ক্যাশে বিদ্যমান না থাকে, ngRepeatএটি ক্যাশে সংরক্ষণ করে, নতুন সুযোগ তৈরি করে, এটিতে বস্তু রাখে, ডোম উপাদান তৈরি করবে ইত্যাদি ।
এখন সম্পর্কে hashKey। সাধারণত hashKeyঅনন্য সংখ্যা দ্বারা উত্পাদিত nextUid()। তবে এটি ফাংশন হতে পারে । hashKeyভবিষ্যতে ব্যবহারের জন্য উত্পাদনের পরে অবজেক্টে সংরক্ষণ করা হয়।
আপনার উদাহরণ কেন ত্রুটি উত্পন্ন করে : ফাংশন getEntities()সর্বদা নতুন বস্তুর সাথে অ্যারে প্রদান করে। এই বস্তুর ক্যাশে hashKeyনেই এবং নেই doesn't ngRepeatসুতরাং ngRepeatপ্রতিটি watch.getজন্য নতুন ঘড়ির জন্য এটির জন্য নতুন সুযোগ তৈরি করে {{entity.id}}। প্রথম এই ঘড়ি watch.getআছে watch.last == initWatchVal। তাই watch.get() != watch.last। সুতরাং $digestনতুন পারাপার শুরু হয়। তাই ngRepeatনতুন ঘড়ির সাথে নতুন সুযোগ তৈরি করে। সুতরাং ... 10 টি ট্র্যাভার্সের পরে আপনি ত্রুটি পান।
কীভাবে আপনি এটি ঠিক করতে পারেন
- প্রতিটি
getEntities()কলে নতুন জিনিস তৈরি করবেন না ।
- আপনার যদি নতুন অবজেক্ট তৈরি করার প্রয়োজন হয় তবে আপনি
hashKeyসেগুলির জন্য পদ্ধতি যুক্ত করতে পারেন । উদাহরণস্বরূপ এই বিষয়টি দেখুন ।
আশা করি যে লোকেরা AngularJS ইন্টার্নালগুলি জানে তারা যদি আমি কোনও বিষয়ে ভুল হয়ে থাকি তবে তারা আমাকে সংশোধন করবে।