由于项目需要拥有三种地图切换功能,在设置里面配置默认地图,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相关代码
}
});
}
}