当前位置: 首页 > 工具软件 > angular-BMap > 使用案例 >

angular-baidu-maps — 百度地图AngularJs指令示例

申屠俊发
2023-12-01

angularjs对百度地图进行的指令封装,github地址

 

主要由于angularjs使用百度地图不是很方便,我就对它进行了一次小小的封装,主要实现的内容如下:

 

拓展百度地图方法,增加map的快速添加marker和点击事件绑定的方法

addMarker(marker|BMap.Overlay,onMarkerClick | 点击事件function);

通过指令绑定地图事件,方式如下,包含全部地图事件,这里只简单写两个
map-event="{'map-click': 'onMapClick($event, $params)', 'map-loaded': 'onMapLoaded($event, $params)'}"

通过ui-baidu-map-info-window 指令创建信息窗体,并将窗体内部当作angularjs模版绑定到当前scope中

 指令:ui-baidu-map-info-window

配置:info-window-event="{'close' : 'onInfoWindowClose($event, $params)','clickclose' : 'onInfoWindowClickClose($event, $params)'}"绑定百度InfoWindow基本事件

由于本人比较懒,下面摘抄于本人github,具体信息请到 项目github地址 查看

 

在命令行中执行以下命令

npm install
bower install

在浏览器中查看demo.html

修改源码后编译

源码在src目录下angularjs-baidu-maps.js,可在修改源码后运行如下命令,在dist目录生成angularjs-baidu-maps.min.js

grunt uglify

使用方式

详细具体使用方式请参考 demo.html demo.js demo.css中内容

js引入

<script src="bower_components/angular/angular.js"></script> <script src="dist/angularjs-baidu-maps.min.js"></script>

基本配置

js中对百度地图配置,通过一个对象mapOpts

angular.module('app', ['ls.bmap']) .controller('DemoCtrl', ['$scope', function ($scope) { $scope.mapOpts = { apiKey: '替换成你的key', center: {longitude: 121.595871,latitude: 31.187017}, zoom: 17, enableScrollWheelZoom: true, enableMapClick: false, onMapLoadFild: function () { //百度地图加载失败 } }; }]);

说明:

  • mapOpts 百度地图配置对象,名称与html中map-options="mapOpts"一致
  • apiKey 百度地图控制台申请的key,百度地图KEY申请
  • center 初始化地图中心点
  • zoom 初始化地图缩放级别
  • enableScrollWheelZoom 是否允许鼠标控制地图缩放
  • enableScrollWheelZoom 是否允许地图默认点击事件(true表示基本标注可以点击)
  • onMapLoadFild 当地图加载失败回调

html模版中,配置如下

<div id="map" style="height:500px;" ui-baidu-map="myMap" map-event="{'map-click': 'onMapClick($event, $params)', 'map-loaded': 'onMapLoaded($event, $params)'}" map-options="mapOpts"> </div>

说明:

  • myMap是Controller中百度地图的引用,就是BMap.Map对象,我们可以使用百度地图提供的方法操作它。myMap可以换成任何值,这里只需要与上面controller中名称一致即可
  • map-event指令中是描述百度地图的各种事件(地图点击、地图加载完成等等,可以到官方去查地图参考,配置方式相同,在事件前加'map-',参数都是($event,$params),$event包含地图事件的信息,$params是这个事件的参数列表(数组)
  • map-options就是我们配置百度地图的对象名称,可以修改为任何值,与controller中保持一致

信息窗体配置

controller中配置信息窗体回调事件

angular.module('app', ['ls.bmap']) .controller('DemoCtrl', ['$scope', function ($scope) { // ... 省略其他配置 $scope.onInfoWindowClick = function (marker) { // 信息窗体内部,按钮点击事件,与angularjs事件绑定方式相同 }; $scope.onInfoWindowClickClose = function($event, $params) { //点击信息窗体关闭按钮 回调,右上角百度地图关闭信息窗体点击时出发。 }; $scope.onInfoWindowClose = function($event, $params) { //信息窗体关闭 回调,信息窗体关闭时触发 }; }]);

html模版中信息窗体配置(示例),实际使用中,只需要把需要当作信息窗体的html段落加上ui-baidu-map-info-window指令即可

<div ui-baidu-map-info-window="myInfoWindow"
     info-window-event="{'close' : 'onInfoWindowClose($event, $params)','clickclose' : 'onInfoWindowClickClose($event, $params)'}"> <div class="m-b-sm">标注</div> <form role="form"> <div class="form-group"> <label for="lat">Lat:</label> <input id="lat" ng-model="currentMarker.point.lat" class="form-control input-sm w-sm m-l-lg"> </div> <div class="form-group"> <label for="lng">Lng:</label> <input id="lng" ng-model="currentMarker.point.lng" class="form-control input-sm w-sm m-l-lg"> </div> <a class="btn btn-success btn-sm m-l-lg m-b-sm" ng-click="onInfoWindowClick(currentMarker)">点我试试</a> </form> </div>

说明:

  • ui-baidu-map-info-window="myInfoWindow"配置controller中操作InfoWindow的引用名称,可以替换为任何值
  • info-window-event配置方式与地图事件相同,不同之处在于这里不需要加前缀
  • ui-baidu-map-info-window指令所包含的所有内容都被当作InfoWindow的内容

转载于:https://www.cnblogs.com/china-ls/p/6282393.html

 类似资料: