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 回答