1

angular-google-maps ライブラリを使用していますが、モデルに新しいマーカーを動的に追加すると、マップを更新できないようです。モデル内のハードコードされたマーカーが正しく表示されます。

HTML

<ui-gmap-markers models="map.placeMarkers" coords="'self'" icon="'icon'" options="'options'" click="'onClicked'" modelsbyref="true"></ui-gmap-markers>

JS

$scope.map.placeMarkers = [
            {
                id: 1,
                latitude: 45,
                longitude: -74,
                options: {},
                title: 'Test 123'
            },
            {
                id: 2,
                latitude: 15,
                longitude: 30,
                options: {},
                title: 'Test 1234'
            }
        ];

上記は正常に機能していますが、次の場合:

var place = {
   id: 3,
   latitude: 455,
   longitude: -574,
   options: {},
   title: 'Test 1233455'
};

$scope.map.placeMarkers.push(place);

モデルは更新されますが、マップは更新されません。$scope.$apply() を使用してみましたが、ダイジェスト サイクルが既に進行中であったため、エラーが発生しました。

4

2 に答える 2

0

ui-gmap-markers ディレクティブで modelsbyref を false に設定する必要があります

 <ui-gmap-markers models="places" coords="'self'" modelsbyref="false">  

   </ui-gmap-markers>
于 2015-03-28T20:07:25.443 に答える
0

私にも同じことが起こりました。解決策を見つけるために何時間も費やしました。

マーカーを更新するたびに angularjs がすぐに更新されないように見えました。 新しいマーカーを配列にプッシュした後、$scope.$digest()を呼び出すだけです。

また、 $scope.$apply()関数を確認すると、自動的に $scope.$digest() が呼び出されます。詳細について説明しているこのチュートリアルを参照してください: $scope.$digest()、$scope.$apply、$scope.watch を示すチュートリアル

上記のチュートリアルに書かれています:

AngularJS が $digest() 関数を呼び出さないまれなケースに遭遇する場合があります。通常、データバインディングが表示された値を更新しないことに気付くことで、これを検出できます。その場合、 $scope.$digest() を呼び出すと動作するはずです。または、おそらく $scope.$apply() を使用できます

于 2016-06-29T07:06:45.950 に答える