ফাংশনটির objectEqualityপ্যারামিটার (তৃতীয় প্যারামিটার) সেট $watchকরা অবশ্যই অ্যারের সমস্ত বৈশিষ্ট্য দেখার সঠিক উপায়।
$scope.$watch('columns', function(newVal) {
alert('columns changed');
},true); // <- Right here
পিরান এটির যথেষ্ট উত্তর দেয় এবং $watchCollectionপাশাপাশি উল্লেখ করে ।
আরো বিস্তারিত
আমি ইতিমধ্যে উত্তর দেওয়া প্রশ্নের উত্তর দিচ্ছি কারণ কারণ আমি উল্লেখ করতে চাই যে উইজার্ডওয়ার্ডনার উত্তরটি ভাল নয় এবং ব্যবহার করা উচিত নয়।
সমস্যা হ'ল হজম তাত্ক্ষণিকভাবে ঘটে না। কার্যকর করার আগে তাদের কোডের বর্তমান ব্লকটি শেষ না হওয়া পর্যন্ত তাদের অপেক্ষা করতে হবে। সুতরাং, lengthএকটি অ্যারের দেখুন আসলে কিছু গুরুত্বপূর্ণ পরিবর্তন মিস করতে পারে$watchCollection ধরতে পারে।
এই কনফিগারেশনটি ধরে নিন:
$scope.testArray = [
{val:1},
{val:2}
];
$scope.$watch('testArray.length', function(newLength, oldLength) {
console.log('length changed: ', oldLength, ' -> ', newLength);
});
$scope.$watchCollection('testArray', function(newArray) {
console.log('testArray changed');
});
প্রথম নজরে, মনে হতে পারে এগুলি একই সাথে আগুন লাগবে, যেমন এই ক্ষেত্রে:
function pushToArray() {
$scope.testArray.push({val:3});
}
pushToArray();
// Console output
// length changed: 2 -> 3
// testArray changed
এটি যথেষ্ট ভাল কাজ করে তবে এটিকে বিবেচনা করুন:
function spliceArray() {
// Starting at index 1, remove 1 item, then push {val: 3}.
$testArray.splice(1, 1, {val: 3});
}
spliceArray();
// Console output
// testArray changed
লক্ষ করুন যে, এর ফলে দৈর্ঘ্য একই এমনকি হয়েছিল, যদিও অ্যারে যাতে ঘড়ি হিসাবে হিসাবে একটি নতুন উপাদান এবং একটি উপাদান হারিয়ে গেছে, $watchউদ্বিগ্ন হয়, lengthপরিবর্তন হয়নি। $watchCollectionযদিও এটি নেওয়া হয়েছে।
function pushPopArray() {
$testArray.push({val: 3});
$testArray.pop();
}
pushPopArray();
// Console output
// testArray change
একই ব্লকে একটি পুশ এবং পপ দিয়ে একই ফলাফল ঘটে।
উপসংহার
অ্যারেতে প্রতিটি সম্পত্তি দেখার জন্য, এ ব্যবহার করুন $watch তৃতীয় প্যারামিটার (অবজেক্টএকোয়ালিটি) অন্তর্ভুক্ত করে অ্যারেতে নিজেই করুন এবং সত্যে সেট হয়ে গেল। হ্যাঁ, এটি ব্যয়বহুল তবে কখনও কখনও প্রয়োজনীয়।
অ্যারেটি কখন প্রবেশ করুন / প্রস্থান করবেন তা দেখার জন্য একটি ব্যবহার করুন $watchCollection ।
একটি ব্যবহার করবেন না $watchউপর lengthঅ্যারের সম্পত্তি। আমি এটি করার জন্য ভাবতে পারি এমন কোনও ঠিক কারণ নেই।
angular.equalsতৃতীয় যুক্তি যখন বুলিয়ান মান নেয় তখন আপনি কেন ব্যবহার করছেন ?