উত্তর:
অ্যাঙ্গুলারজেএস ১.৩ থেকে শুরু করে একটি নতুন পদ্ধতি রয়েছে যা $watchGroup
বাক্সের একটি সেট পর্যবেক্ষণের জন্য ডেকে আনে ।
$scope.foo = 'foo';
$scope.bar = 'bar';
$scope.$watchGroup(['foo', 'bar'], function(newValues, oldValues, scope) {
// newValues array contains the current values of the watch expressions
// with the indexes matching those of the watchExpression array
// i.e.
// newValues[0] -> $scope.foo
// and
// newValues[1] -> $scope.bar
});
$scope.$watchGroup(['mycustomctrl.foo', 'mycustomctrl.bar'],...
newValues
এবং oldValues
যেমন undefined
যখন স্বতন্ত্রভাবে বৈশিষ্ট্য যথারীতি কাজ পর্যবেক্ষক।
AngularJS 1.1.4 দিয়ে শুরু করে আপনি ব্যবহার করতে পারেন $watchCollection
:
$scope.$watchCollection('[item1, item2]', function(newValues, oldValues){
// do stuff here
// newValues and oldValues contain the new and respectively old value
// of the observed collection array
});
এখানে Plunker উদাহরণ
ডকুমেন্টেশন এখানে
$watchCollection
উদ্দেশ্য হ'ল কোনও বস্তু হস্তান্তর করা এবং অবজেক্টের যে কোনও বৈশিষ্ট্য পরিবর্তনের জন্য একটি ঘড়ি সরবরাহ করা, যেখানে $watchGroup
পরিবর্তনের জন্য দেখার জন্য পৃথক বৈশিষ্ট্যগুলির একটি অ্যারে হস্তান্তর করার উদ্দেশ্যে। অনুরূপ এখনও বিভিন্ন সমস্যা মোকাবেলায় সামান্য পৃথক। রাম রাম!
$watch
প্রথম প্যারামিটার এছাড়াও একটি ফাংশন হতে পারে।
$scope.$watch(function watchBothItems() {
return itemsCombinedValue();
}, function whenItemsChange() {
//stuff
});
যদি আপনার দুটি সম্মিলিত মান সহজ হয় তবে প্রথম প্যারামিটারটি সাধারণত একটি কৌণিক অভিব্যক্তি। উদাহরণস্বরূপ, প্রথম নাম এবং সর্বশেষ নাম:
$scope.$watch('firstName + lastName', function() {
//stuff
});
fullName = firstName + " " + lastName
প্রথম আর্গুমেন্ট (বদলে মত সরল অভিব্যক্তি হিসাবে একটি ফাংশন ক্ষণস্থায়ী প্রয়োজন 'firstName, lastName'
)। কৌণিকটি তাই শক্তিশালী, তবে কিছু ক্ষেত্র রয়েছে যেখানে এটি কার্যকরীভাবে বা নকশার নীতিগুলি (যেগুলি) আপস করে না বলে মনে হয় তা আরও বেশি বিকাশকারী-বান্ধব হতে পারে।
$scope.$watch('firstName + lastName', function() {...})
। এছাড়াও আপনি মাত্র দুই ঘড়ির করতে পারে: function nameChanged() {}; $scope.$watch('firstName', nameChanged); $scope.$watch('lastName', nameChanged);
। আমি উত্তরের সাথে সহজ কেস যোগ করেছি added
এখানে আপনার আসল সিউডো-কোডের অনুরূপ একটি সমাধান রয়েছে যা আসলে কাজ করে:
$scope.$watch('[item1, item2] | json', function () { });
সম্পাদনা: ঠিক আছে, আমি মনে করি এটি আরও ভাল:
$scope.$watch('[item1, item2]', function () { }, true);
মূলত আমরা জসন পদক্ষেপ এড়িয়ে চলেছি, যা মনে হচ্ছে বোবা লাগছিল, তবে এটি কাজ করে নি। এগুলি হ'ল প্রায়শই বাদ দেওয়া 3 য় প্যারামিটার যা রেফারেন্স সাম্যতার বিপরীতে অবজেক্টের সাম্যতায় সক্রিয় হয়। তারপরে আমাদের তৈরি অ্যারে অবজেক্টের মধ্যে তুলনা আসলে সঠিকভাবে কাজ করে।
TypeError: Object #<Object> has no method '$watchCollection'
তবে এই সমাধানটি আমার সমস্যা সমাধানে আমাকে সহায়তা করে!
$scope.$watch('[chaptercontent.Id, anchorid]', function (newValues, oldValues) { ... }, true);
সুযোগের কোনও অবজেক্টের ক্ষেত্র নির্বাচন করতে আপনি $ ওয়াচগ্রুপে ফাংশন ব্যবহার করতে পারেন।
$scope.$watchGroup(
[function () { return _this.$scope.ViewModel.Monitor1Scale; },
function () { return _this.$scope.ViewModel.Monitor2Scale; }],
function (newVal, oldVal, scope)
{
if (newVal != oldVal) {
_this.updateMonitorScales();
}
});
_this
? সুযোগটি স্পষ্টভাবে সংজ্ঞায়িত না করে কার্যগুলিতে ডুবে যায় না?
কেন কেবল এটিকে মুড়ে ফেলা হয় না forEach
?
angular.forEach(['a', 'b', 'c'], function (key) {
scope.$watch(key, function (v) {
changed();
});
});
এটি সম্মিলিত মানটির জন্য কোনও ফাংশন সরবরাহ করার মতো একই ওভারহেড সম্পর্কে, প্রকৃতপক্ষে মান রচনা সম্পর্কে চিন্তা না করে ।
changed()
যখনই বৈশিষ্ট্যের যে কোনওটিতে কিছু পরিবর্তন হয় তখনই তাকে ডাকে। এটি হুবহু একই আচরণ যেমন মিলিত মানের জন্য কোনও ফাংশন সরবরাহ করা হয়েছিল।
মানগুলি একত্রিত করার জন্য কিছুটা নিরাপদ সমাধান হতে পারে আপনার $watch
ফাংশন হিসাবে নিম্নলিখিতটি ব্যবহার করা :
function() { return angular.toJson([item1, item2]) }
অথবা
$scope.$watch(
function() {
return angular.toJson([item1, item2]);
},
function() {
// Stuff to do after either value changes
});
$ প্রথম প্যারামিটারটি কৌণিক অভিব্যক্তি বা ফাংশন হতে পারে $ ডকুমেন্টেশন দেখুন on সুযোগ। $ দেখুন । এটিতে $ ঘড়ির পদ্ধতি কীভাবে কাজ করে: যখন ওয়াচএক্সপ্রেশন বলা হয়, কৌণিক কীভাবে ফলাফলগুলির সাথে তুলনা করে ইত্যাদি সম্পর্কে প্রচুর দরকারী তথ্য রয়েছে It
কেমন:
scope.$watch(function() {
return {
a: thing-one,
b: thing-two,
c: red-fish,
d: blue-fish
};
}, listener...);
true
প্যারামিটার ছাড়াই scope.$watch
(যেমন আপনার উদাহরণ হিসাবে) listener()
প্রতিবারই গুলি চালানো হবে, কারণ বেনামে হ্যাশটির প্রতিবার একটি আলাদা রেফারেন্স রয়েছে।
return { a: functionA(), b: functionB(), ... }
। আমি তখন একে অপরের বিরুদ্ধে নতুন এবং পুরানো মানগুলির প্রত্যাবর্তিত বস্তুগুলি পরীক্ষা করি check
$scope.$watch('age + name', function () {
//called when name or age changed
});
বয়স এবং নাম উভয়ই পরিবর্তিত হলে এখানে ফাংশনটি কল করা হবে।
কৌণিকটি $watchGroup
ভার্সন ১.৩ এ প্রবর্তিত হয়েছিল যার সাহায্যে আমরা একাধিক ভেরিয়েবল দেখতে পারি, একটি একক $watchGroup
ব্লককে
$watchGroup
প্রথম প্যারামিটার হিসাবে অ্যারে নেওয়া হয় যাতে আমরা আমাদের ভেরিয়েবলগুলি দেখার জন্য অন্তর্ভুক্ত করতে পারি।
$scope.$watchGroup(['var1','var2'],function(newVals,oldVals){
console.log("new value of var1 = " newVals[0]);
console.log("new value of var2 = " newVals[1]);
console.log("old value of var1 = " oldVals[0]);
console.log("old value of var2 = " oldVals[1]);
});