Çox $ miqyaslı atributları bax

$watch istifadə edərək, bir çox obyektdə hadisələrə abunə olmağın bir yolu varmı?

məsələn.

 $scope.$watch('item1, item2', function () { }); 
406
14 авг. Greg 14 aug tərəfindən təyin . 2012-08-14 15:49 '12 at 15:49 2012-08-14 15:49
@ 10 cavab

AngularJS 1.3 ilə başlayaraq, bir sıra ifadələr müşahidə üçün yeni $watchGroup üsulu mövcuddur.

 $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 // ie // newValues[0] -> $scope.foo // and // newValues[1] -> $scope.bar }); 
524
06 мая '14 в 15:51 2014-05-06 15:51 Cavab Paolo Moretti tərəfindən 06.05.14 tarixində 15:51 2014-05-06 15:51

AngularJS 1.1.4 ilə başlayan $watchCollection istifadə edə bilərsiniz:

 $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 }); 
border=0

Burada nümunə dalgıç

Buradakı sənədlər

280
21 июня '13 в 1:25 2013-06-21 01:25 Cavab Răzvan Flavius ​​Panda'ya verilərkən , 21 iyun '13 'də saat 01:25' da 2013-06-21 01:25

$watch İlk parametr də funksiya ola bilər.

 $scope.$watch(function watchBothItems() { return itemsCombinedValue(); }, function whenItemsChange() { //stuff }); 

İki birləşdiyiniz dəyərlər sadədirsə, ilk parametr yalnız bir ifadə mənbəyidir. Məsələn, ilkName və lastName:

 $scope.$watch('firstName + lastName', function() { //stuff }); 
116
14 авг. Andrew Joslin 14 aug. 2012-08-14 16:04 '12 at 4:04 pm 2012-08-14 16:04

İşdə həqiqətən işləyən orijinal pseudocode ilə çox bənzər bir həll var:

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

EDIT: Tamam, mən daha yaxşı hesab edirəm:

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

Əsasən biz silly görünən json addım atlayacağıq, lakin olmadan olmadan işləmişdir. Onların əksəriyyəti obyektlərin bərabərliyini və referans bərabərliyini ehtiva edən 3-cü parametrdən eksik olur. Sonra yaradılan dizi obyektlərimiz arasındakı müqayisə həqiqətən düzgün işləyir.

68
19 янв. Karen Zilles 19 Yanvar cavab verdi 2013-01-19 04:05 '13 'da 4:05' də 2013-01-19 04:05

Niyə yalnız onu forEach ?

 angular.forEach(['a', 'b', 'c'], function (key) { scope.$watch(key, function (v) { changed(); }); }); 

Bu , dəyərlərin tərkibinə dair narahatlıq etmədən birləşdirilmiş dəyər üçün funksiyanı təmin edən eyni yük daşıyıcısıdır .

12
12 мая '13 в 17:31 2013-05-12 17:31 Cavab Erik Aigner tərəfindən verilir May 12, '13 at 5:31 pm 2013-05-12 17:31

Bölgədəki obyekt sahələrini seçmək üçün $ watchGroup funksiyalarından istifadə edə bilərsiniz.

  $scope.$watchGroup( [function () { return _this.$scope.ViewModel.Monitor1Scale; }, function () { return _this.$scope.ViewModel.Monitor2Scale; }], function (newVal, oldVal, scope) { if (newVal != oldVal) { _this.updateMonitorScales(); } }); 
10
21 мая '15 в 2:57 2015-05-21 02:57 cavab Yang Zhang 21 May 'da verilir 2:57 2015-05-21 02:57

Qiymətlərin birləşdirilməsi üçün bir qədər təhlükəsiz həlli aşağıdakı $watch funksiyalarından istifadə etmək olar:

 function() { return angular.toJson([item1, item2]) } 

və ya

 $scope.$watch( function() { return angular.toJson([item1, item2]); }, function() { // Stuff to do after either value changes }); 
9
02 окт. oğlan tərəfindən verilmiş cavab Oct 02 2012-10-02 11:16 '12 at 11:16 2012-10-02 11:16

$ İlk saat parametri, bir açısal ifadə və ya funksiya ola bilər. $ Miqyaslı sənədlərə baxın . $ İzləyin . Bu, $ watch metodunun necə işlədiyinə dair bir çox faydalı məlumatı ehtiva edir: watchExpression çağırıldığında, nəticələrin necə müqayisə etdiyini və s.

5
14 авг. Artem Andreevin cavabı 14 avqust. 2012-08-14 16:35 '12 at 4:35 pm 2012-08-14 16:35

necə haqqında

 scope.$watch(function() { return { a: thing-one, b: thing-two, c: red-fish, d: blue-fish }; }, listener...); 
5
12 нояб. Cavab wacamo 12 noyabrda verilir . 2012-11-12 22:45 '12 saat 22:45 'da 2012-11-12 22:45
 $scope.$watch('age + name', function () { //called when name or age changed }); 

Burada yaş və ad dəyərləri dəyişdirildikdə funksiya çağırılacaq.

3
16 апр. Cavab Akash Shinde 16 apr tərəfindən verilir . 2015-04-16 22:21 '15 at 10:21 pm 2015-04-16 22:21

tags ilə bağlı digər suallar və ya bir sual