2015-11-08 2 views
5

私はangularjs-google-mapsを使用していますが、地図上のマーカーとして顧客をループするときにエラーが発生しています。私はこれらを削除すると、彼らが正常に動作として

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

エラーは、cust.categorycust.nameとは何かを持っているようです。

これは私が取得していますエラーメッセージの最初の数行です:

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 

完全なエラーメッセージhereを。

これに関するお手伝いがあります。前もって感謝します!アンギュラグーグルマップの一部だカスタムマーカーディレクティブの

UPDATE

コードhereです。

+0

@realpha、データを表示してください。 'cust.category'のデータ型は? –

+1

問題のjsfiddleを設定できますか? – jjbskir

+0

@AbhilashPA 'cust.category'は文字列であり、' cust.name'と同様です。どちらもオブジェクト内に存在します。 – realph

答えて

1

ループ内にダイジェストサイクルが滞っているようです。 Angularはダイジェストサイクルを持ち、モデルを見て($ scopeにあるものは何でも)、モデルが変更された場合はビューに変更を適用します。あるダイジェストサイクルで再度値を変更する関数を実行している場合、同じ関数を再度トリガーし、モデルの値を変更し、ダイジェストサイクルの無限ループをトリガーする別のダイジェストサイクルをトリガーします。

これは、答えをより正確にするためにcustomMarkerディレクティブのコードを追加することができます。

+0

Hmm。それがどうして起こるのかよく分かりませんが、角度のGoogleマップリポジトリのカスタムマーカー指示コードへのリンクで質問を更新しました。 – realph

+0

ドキュメントごとこれは「なぜこのエラーがスローされるのですか」という質問に対する正解と思われます。https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$digest –

0

なぜあなたはclass = "{{cust.category}}"をバインドしていますか?ng-classを使用してみてください。また、ng-repeatの$ indexでトラックを使用できますか?これを修正するためのパッチがリリースされました。

0

このようなコード:

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

は、連結後"[obj1.prop, obj2.prop]"のように見えます。
式のように、$parseによって解析され、内部で何も変更されていない場合でも、すべての反復で自己の新しいインスタンスを評価します。

$watchを呼び出す前に補間/解析し、実際に変更された関連データだけを変更する条件を記述する必要があります。


$watchあなたが値ではなく、参照の等価で配列を比較するために、三番目のパラメータ(objectEquality)を使用しようとすることができfunction(watchExp, listener, objectEquality, prettyPrintExpression)
です。

@param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of comparing for reference equality. 
関連する問題