2015-02-05 71 views
1

即时通讯使用角谷歌地图库,但我似乎无法得到地图更新时,我动态地添加新的标记到我的模型。模型中的硬编码标记正确显示。角度谷歌地图更新标记模型

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(),但由于摘要循环已经在进行中,所以出现错误。

+0

请尝试以下链接。这是一个使用角度js动态添加标记的工作示例。遵循这个例子,并希望它适合你:) [** LINK **](http://jsfiddle.net/svigna/pc7Uu/) – 2015-02-05 17:51:27

+0

我有同样的问题,你有解决方案吗? Ben_hawk – kimo 2015-12-26 18:58:08

+0

是的,我没有与这个图书馆工作了很长时间,但如果我记得正确地表现出性能改变。您需要更改数组引用才能刷新地图。尝试在您的places数组上使用角度副本,并在地图位置属性中设置结果。让我知道它是否有效。 – 2015-12-27 21:33:37

回答

0

需要modelsbyref在UI的GMAP-标志设置为false指令

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

    </ui-gmap-markers> 
+0

这不起作用 – dublx 2015-06-24 13:20:48

0

同样的事情发生在我身边。用了几个小时找到解决方案。

似乎只要我们更新标记,angularjs不会立即更新它。只需拨打$ scope。$ digest()将新标记推送到数组后。

同时检查$ scope。$ apply()函数,它会自动调用$ scope。$ digest()。 请参阅本教程,详细讲解: tutorial showing $scope.$digest(), $scope.$apply, $scope.watch

它写在上面的教程:

您可能会遇到一些角落情况下,AngularJS不会调用$摘要你()函数。您通常会通过注意到数据绑定不会增加显示的值来检测该数据。在这种情况下,调用$ scope。$ digest(),它应该可以工作。或者,您可以使用$ scope。$ apply()