Peržiūrėkite kelis $ apimties atributus

Ar yra būdas prenumeruoti įvykius keliuose objektuose naudojant $watch

Pavyzdžiui.

 $scope.$watch('item1, item2', function () { }); 
406
14 авг. nustatė Greg 14 rug. 2012-08-14 15:49 '12, 15:49 PM 2012-08-14 15:49
@ 10 atsakymų

Pradedant nuo AngularJS 1.3, yra naujas $watchGroup metodas, skirtas stebėti išraiškų rinkinį.

 $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 Atsakymą pateikė Paolo Moretti gegužės 06 d. 14 d. 15:51 2014-05-06 15:51

Nuo „AngularJS 1.1.4“ galite naudoti $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 }); 

Pavyzdys stūmoklis čia

Dokumentacija čia

280
21 июня '13 в 1:25 2013-06-21 01:25 atsakymas pateikiamas Răzvan Flavius ​​Panda birželio 21 d., 13 val. 1:25 2013-06-21 01:25

$watch Pirmasis parametras taip pat gali būti funkcija.

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

Jei dvi kombinuotos vertės yra paprastos, pirmasis parametras yra tik kampinė išraiška. Pavyzdžiui, pirmasis vardas ir pavardė:

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

Čia yra sprendimas, kuris yra labai panašus į jūsų pradinį pseudokodą, kuris tikrai veikia:

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

EDIT: Gerai, manau, kad tai dar geriau:

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

Iš esmės mes praleisime „Json“ žingsnį, kuris atrodė kvailas, bet jis be jo neveikė. Dažnai jų trūksta iš trečiojo parametro, kuris apima objektų lygybę, o ne lygybės nuorodą. Tada palyginimai tarp mūsų sukurtų masyvo objektų tikrai veikia teisingai.

68
19 янв. Karen Zilles atsakė į 19 Jan 2013-01-19 04:05 '13, 4:05, 2013-01-19 04:05

Kodėl gi ne tik suvyniokite jį į forEach ?

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

Tai yra apie tą patį pridėtinę vertę, kaip funkciją, skirtą kombinuotai vertei , nesijaudindami dėl vertybių sudėties .

12
12 мая '13 в 17:31 2013-05-12 17:31 atsakymą pateikė Erik Aigner, gegužės 12 d., 13 d., 17:31 val. 2013-05-12 17:31

$ WatchGroup funkcijose galite pasirinkti objekto laukus regione.

  $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 atsakymas pateikiamas Yang Zhang gegužės 21 d. 15:57 2015-05-21 02:57

Šiek tiek saugesnis sprendimų derinimo sprendimas gali būti šių „ $watch funkcijų naudojimas:

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

arba

 $scope.$watch( function() { return angular.toJson([item1, item2]); }, function() { // Stuff to do after either value changes }); 
9
02 окт. atsakymas, kurį pateikė guyk Oct 02 2012-10-02 11:16 '12, 11:16 2012-10-02 11:16

$ Pirmasis stebėjimo parametras gali būti kampinė išraiška arba funkcija. Žr. $ Apimties dokumentaciją . $ Žiūrėti . Jame pateikiama daug naudingos informacijos apie tai, kaip veikia „$ watch“ metodas: kai vadinama „WatchExpression“, kaip kampinis lygina rezultatus ir pan.

5
14 авг. Artem Andreev atsakymas 14 rug. 2012-08-14 16:35 '12 at 4:35 pm 2012-08-14 16:35

kaip apie

 scope.$watch(function() { return { a: thing-one, b: thing-two, c: red-fish, d: blue-fish }; }, listener...); 
5
12 нояб. Atsakymas duotas 12 lapkričio 12 d. 2012-11-12 22:45 '12 10:45 pm 2012-11-12 22:45
 $scope.$watch('age + name', function () { //called when name or age changed }); 

Čia funkcija bus vadinama, kai pasikeis amžiaus ir vardo reikšmės.

3
16 апр. atsakymą pateikė Akash Shinde 16 balandis. 2015-04-16 22:21 '15, 10:21 val. 2015-04-16 22:21

Kiti klausimai apie žymes arba Ask a Question