由于项目需要拥有三种地图切换功能,在设置里面配置默认地图,apicloud 提供了四种数据存储机制,Local Storage,偏好数据,文件,数据库,local storage 是对 h5 的 localStorage 的封装,项目使用在对当前 app 的一些临时数据存储,而一些常用配置,存放在偏好数据,类似于 android 的 sharePerference,接口方法有 api.setPrefs()、api.getPrefs()、api.removePrefs(),其中 getPrefs() 有同步和异步的获取方法
//异步返回结果:api.getPrefs( { key: 'userName', }, function (ret, err) { var userName = ret.value; });//同步返回结果:var userName = api.getPrefs({ sync: true, key: 'userName',});
地图切换
通过对偏好数据的存储,每次进入地图后,获取指定的地图的 pref 值,动态引入对应的地图脚本,后执行相应的代码
稍微封装了下动态引入 js 文件的代码(习惯了 nodejs 的回调写法,由于移动端对 promise 支持情况,不做 promise 封装)
function loadScript(src, loadCb) { var scriptEl = document.createElement('script'); scriptEl.type = 'text/javascript'; if (typeof loadCb == 'function') { scriptEl.onload = function () { var args = Array.prototype.slice.call(arguments); args = [null].concat(args); loadCb.apply(this, args); }; scriptEl.onerror = function () { loadCb.apply(this, arguments); }; } document.getElementsByTagName('head')[0].appendChild(scriptEl); // document.currentScript.parentNode.insertBefore(scriptEl, document.currentScript); scriptEl.src = src;}
每次进入地图监控页面后,判断用户设置的地图类型,引入相关地图脚本文件后就可以执行对应的地图功能代码
var mapType = api.getPrefs({ sync: true, key: 'mapType',});switch (mapType) { case 1: { loadScript('./bMap.js', function (errEvent, successEvent) { if (!errEvent) { // 百度地图相关代码 } }); break; } case 2: { loadScript('./googleMap.js', function (errEvent, successEvent) { if (!errEvent) { // google相关代码 } }); break; } default: { loadScript('./ols.js', function (errEvent, successEvent) { if (!errEvent) { // openlayers相关代码 } }); }}