AngularJS GoogleMap指令

时间:2016-05-12 14:46:35

标签: javascript angularjs google-maps angularjs-directive

我正在尝试创建一个Angular指令来显示Google地图。

这是我的指示:

'use strict';

var CartoBundle = angular.module('CartoBundle', []);

CartoBundle.directive('cartoBundleMap', function() {

var map;

return {
    restrict: 'EA',
    replace: true,
    template: '<section id="map"></section>',
    scope: {
        zoom: "@",
        zoomControl: "=",
        fullScreenControl: "=",
        mapTypeControl: "=",
        scaleControl: "=",
        streetViewControl: "=",
        mapTypeId: "@"
    },
    link: function(scope, element, attrs) {

        var options = {
            center: new google.maps.LatLng(46.52863469527167,2.43896484375),
            zoom: 6,
            zoomControl : true,
            fullscreenControl : true,
            mapTypeControl: true,
            scaleControl: true,
            streetViewControl: true,
            mapTypeId: "hybrid"
        };

        if (scope.zoom) options.zoom = scope.zoom * 1;
        if (scope.zoomControl) options.zoomControl = scope.zoomControl;
        if (scope.fullScreenControl) options.fullScreenControl = scope.fullScreenControl;
        if (scope.mapTypeControl) options.mapTypeControl = scope.mapTypeControl;
        if (scope.scaleControl) options.scaleControl = scope.scaleControl;
        if (scope.streetViewControl) options.streetViewControl = scope.streetViewControl;
        if (scope.mapTypeId) options.mapTypeId = scope.mapTypeId;

        map = new google.maps.Map(element[0], options);
    },
};
});

当我使用以下HTML进行测试时,它会显示包含所有控件的地图(它可以工作):

<carto-bundle-map></carto-bundle-map>

此外,当我尝试设置文本值时,它也能正常工作:

<carto-bundle-map
    map-type-id="satellite"
></carto-bundle-map>

但是当我尝试设置布尔值时,它不会(我的控件保持不变):

<carto-bundle-map 
    zoom-control="false"
    full-screen-control="false"
    map-type-control="false"
    scale-control="false"
    street-view-control="false"
    map-type-id="satellite"
></carto-bundle-map>

我可以说的最后一件事是,如果我直接在指令中将控件调整为false,它就会起作用,我的控件就会消失。

我在某处阅读是因为我必须将范围设置为“等于”,但情况已经如此:

scope: {
    zoom: "@",
    zoomControl: "=",
    fullScreenControl: "=",
    mapTypeControl: "=",
    scaleControl: "=",
    streetViewControl: "=",
    mapTypeId: "@"
},

有人可以帮助我作为angularjs的初学者。

此致

1 个答案:

答案 0 :(得分:0)

好的,我发现为什么它不起作用。

因为如果scope.attribute等于false,它将永远不会验证if条件。

我修改了代码如下:

if (!angular.isUndefined(scope.zoom)) options.zoom = scope.zoom * 1;

希望这可以帮助别人。

此致