[javascript] شاهد عدة سمات نطاق $


Answers

بدءًا من 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
});

سبيل المثال على سبيل المثال

وثائق here

Question

هل هناك طريقة للاشتراك في الأحداث على كائنات متعددة باستخدام $watch

على سبيل المثال

$scope.$watch('item1, item2', function () { });



يمكن أن تكون المعلمة الأولى للساعة $ تعبيرًا زاويًا أو وظيفة. انظر الوثائق على $scope.$watch . يحتوي على الكثير من المعلومات المفيدة حول كيفية عمل طريقة ساعات المشاهدة: عندما يتم استدعاء watchExpression ، كيف يقارن النتائج الزاوي ، إلخ.




$scope.$watch('age + name', function () {
  //called when name or age changed
});

سيتم استدعاء الدالة هنا عند تغيير كل من العمر واسم القيمة.




يمكنك استخدام الدالات في watchGroup $ لتحديد حقول كائن في النطاق.

        $scope.$watchGroup(
        [function () { return _this.$scope.ViewModel.Monitor1Scale; },   
         function () { return _this.$scope.ViewModel.Monitor2Scale; }],  
         function (newVal, oldVal, scope) 
         {
             if (newVal != oldVal) {
                 _this.updateMonitorScales();
             }
         });



في ما يلي حل مشابه جدًا لرمزك الزائف الأصلي الذي يعمل بالفعل:

$scope.$watch('[item1, item2] | json', function () { });

تعديل: حسنًا ، أعتقد أن هذا أفضل:

$scope.$watch('[item1, item2]', function () { }, true);

في الأساس نحن نخطو خطوة "جون" ، التي بدت غبية في البداية ، لكنها لم تكن تعمل بدونها. هم المفتاح هو المعلمة الثالثة المحذوفة في كثير من الأحيان والتي تحول على مساواة الكائن بدلا من المساواة المرجعية. ثم تعمل المقارنات بين كائنات الصفيف التي أنشأناها حقًا.




Related