2015-11-08 9 views
5

Używam angularjs-google-maps i pojawia się błąd podczas próby zapętlenia moich klientów jako znaczników na mapie.

<map> 
    <custom-marker ng-repeat="cust in customers" position="[ {{ cust.lat }}, {{ cust.lon }} ]"> 
    <div class="{{ cust.category }}">{{ cust.name }}</div> 
    </custom-marker> 
</map> 

Błąd wydaje się mieć coś wspólnego z cust.category i cust.name, a kiedy usunąć te działają dobrze.

Jest to pierwsza para linie komunikatu o błędzie dostaję:

Watchers fired in the last 5 iterations: [["[ cust.category , cust.name ]; newVal: 
[\"pro\",\"Fred\"]; oldVal: [\"pro\",\"Fred\"]","fn: function (context) {\n   
try {\n for(var i = 0, ii = length, part; i<ii; i++) {\n 

wiadomości Pełny błędu here.

Każda pomoc w tym zakresie jest doceniana. Z góry dziękuję!

UPDATE

Kod dyrektywy zamówienie markera, który jest częścią kątową-google-map jest here.

+0

@realpha, czy mógłbyś pokazać swoje dane? Jaki jest typ danych "cust.category"? –

+1

Czy możesz skonfigurować jsfiddle swojego problemu? – jjbskir

+0

@AhhilashPA 'cust.category' jest ciągiem znaków, podobnie jak" cust.name ". Oba istnieją wewnątrz obiektu. – realph

Odpowiedz

1

Wygląda na to, że cykl trawienny utknął w pętli. Angular ma cykl przeglądania, w którym ogląda modele (cokolwiek jest w $ scope) i stosuje zmiany w widokach, jeśli modele się zmieniają. Jeśli w cyklu trawienia wykonujesz jakąś funkcję, która ponownie zmienia wartość, uruchamiasz kolejny cykl trawienny, który uruchamia ponownie tę samą funkcję, zmienia wartość na modelu i uruchamia nieskończoną pętlę cyklów trawiennych.

Powiedziawszy, możesz chcieć dodać kod dla swojej dyrektywy customMarker, aby odpowiedzi były bardziej precyzyjne.

+0

Hmm, nie jestem pewien, dlaczego tak by się stało. Zaktualizowałem swoje pytanie z linkiem do kodu dyrektywy znacznika niestandardowego z repozytorium mapowania kątowego google. – realph

+0

Dla dokumentów , wydaje się, że jest to poprawna odpowiedź na pytanie "dlaczego ten błąd jest zgłaszany?" https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$digest –

0

dlaczego wiążę class = "{{cust.category}}}", spróbuj użyć ng-class.Also możesz użyć track by $ index w ng-repeat.I otrzymałem ten błąd podczas uruchamiania mojej aplikacji jonowej na ios9. Wydali poprawkę, aby to naprawić.

0

Kod tak:

scope.$watch('[' + varsToWatch.join(',') + ']'... 

wygląda "[obj1.prop, obj2.prop]" po konkatenacji.
Wyrażenia, takie jak te analizowane przez $parse i powodują samoocenę do nowej instancji tablicy w każdej iteracji, nawet jeśli nic się w niej nie zmieniło.

Powinieneś interpolować/przeanalizować go przed wywołaniem $watch i napisać warunek, który zmienia tylko te dane, które rzeczywiście zostały zmienione.


$watch jest function(watchExp, listener, objectEquality, prettyPrintExpression)
Można spróbować użyć trzeci parametr (objectEquality) porównać tablice według wartości, ale nie przez równości odniesienia.

@param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of comparing for reference equality.