tc-component v1.0.10
tc-component
tc-component 提供开箱即用的 app 同层渲染组件。
开发指南
安装
npm 安装
npm i tc-component -S
快速上手
引入 tc-component
在 main.js 中写入以下内容:
import Vue from "vue";
import tcComponent from "tc-component";
import "tc-component/lib/tc-component.css";
import App from "./App.vue";
Vue.use(tcComponent);
new Vue({
el: "#app",
render: (h) => h(App),
});
组件
提供组件
- tc-base 组件
- tc-map 组件
tc-base 组件
tc-base 组件为同层渲染基础组件,同层渲染组件由于 Android、ios 实现不同,并且在初始化过程中需要一些特殊处理,所以将同层渲染组件的特殊处理封装为一个基础组件,业务团队在使用时直接引用组件即可,不用再重复处理。
<tc-base
:platform="platform"
:initConfig="mapConfig"
componentType="GaoDeMap"
:webElementRegion="webElementRegion"
:eventCallback="eventCallback"
:initSuccess="initSuccess"
:initError="initError"
/>
Attributes
属性 | 类型 | 必填 | 说明 | 默认值 |
---|---|---|---|---|
platform | string | 是 | 当前所属平台,取值:android、ios | 无 |
initConfig | object | 否 | 插件初始化的参数,该参数会在插件create方法中传入,根据插件create方法要求传参即可 | {} |
componentType | string | 是 | 对应的原生组件的类型,在相对应的插件文档中查看 | 无 |
webElementRegion | string[] | 是 | 屏幕中 web 元素的唯一的 class,用来解决 webView 和 nativeView 的事件分发问题,如果不设置会导致web原生事件失效,当页面中web元素变化时也需要修改这个值,组件内部已经watch了这个值的变化 | [] |
eventCallback | function | 否 | 原生组件事件触发回调函数 | 无 |
initSuccess | function | 否 | 原生组件初始化成功函数 | 无 |
initError | function | 否 | 原生组件初始化失败函数 | 无 |
回调函数
eventCallback
原生组件触发事件的回调函数,原生组件触发的所有事件都通过这个函数分发,回调参数见相对应的插件文档。
initSuccess
原生组件初始化成功后的回调函数,函数有两个参数:control、event,control为控制器,可以通过其调用原生插件的方法,event为原生组件初始化成功的事件对象,结构从相对应的插件文档中获取。
- control中的callNativeMethod方法
通过control对象中的callNativeMethod方法可以直接调用该组件对应原生插件的方法,方法名与插件文档中的方法名一致,如需要调用插件的的setWebElementRegions方法:control.callNativeMethod("setWebElementRegions", hotRegionData);
,第一个参数为调用的方法名,后续参数为被调用函数所需的参数。
control对象上其他方法请不要随意调用。
initError
原生组件初始化失败的回调函数,参数为原生端返回的error对象,具体内容以对应插件文档为准
tc-map 组件
同层渲染地图组件,支持 web、android、ios 三端。
<tc-map
:map-config="mapConfig"
:custom-init="mapInit"
:platform="platform"
class="my-map"
@layerClick="layerClick"
@zoomChange="zoomchange"
@mapClick="mapClick"
/>
准备工作
使用前先到高德地图开放平台申请相关AppKey
。相关步骤如下:
Android 申请需要
package
和sha1
,使用平台默认的签名文件时打包可使用以下sha1
内容:生产环境:69:92:6F:98:03:ED:FF:56:C2:BD:6D:23:97:1A:AC:B5:4B:FB:63:3C 其他环境:B0:24:17:1A:F3:90:2E:22:8D:96:BC:D6:45:B5:89:5B:46:5D:66:81
iOS 申请需要应用
Bundle Id
。
因苹果审核机制,对位置使用权限需要进行授权,以下字段需要根据 APP 具体的使用权限级别,在隐私权限 hook 中添加详细的使用说明。
权限字段 | 类型 | 作用 |
---|---|---|
NSLocationUsageDescription | String | 访问位置 |
NSLocationWhenInUseUsageDescription | String | 在使用期间访问位置 |
NSLocationAlwaysUsageDescription | String | 始终允许访问位置 |
NSLocationAlwaysAndWhenInUseUsageDescription | String | 始终允许访问位置,iOS11 新增,NSLocationAlwaysUsageDescription 在功能上被降级为为“应用使用期间” |
NSLocationTemporaryUsageDescriptionDictionary | Map | 申请精度定位,iOS14 新增,必须要设置。当用户已授权过定位权限,且为模糊定位权限时,需要发起精度定位权限申请。若用户拒绝,会返回模糊位置。 |
hook 示例
// 获取info.plist配置文件对象:plistObj
......
plistObj.NSLocationUsageDescription = '如果不允许,将无法进行后续的业务操作';
plistObj. NSLocationWhenInUseUsageDescription = '如果不允许,可能导致应用功能无法正常使用';
plistObj. NSLocationAlwaysUsageDescription = '如果不允许,可能导致应用功能无法正常使用';
plistObj. NSLocationAlwaysAndWhenInUseUsageDescription = '如果不允许,可能导致应用功能无法正常使用';
plistObj. NSLocationTemporaryUsageDescriptionDictionary = {
"FullAccuracyUsageDescription":'如果不允许,可能导致应用获取不到精确的位置信息';
};
web 端 key 直接申请即可
注册成功后,将获取到的
AppKey
在平台中添加插件时填到GAODEMAP_KEY_IOS
和GAODEMAP_KEY_ANDRIOD
中,web 端的 key 在使用组件时通过参数传入即可。
Map Attributes
参数 | 类型 | 平台 | 必填 | 说明 | 默认值 |
---|---|---|---|---|---|
map-config | object | android、ios、web | 是 | 创建地图的参数,详情请参照下方options结构说明 | — |
platform | enum | android、ios、web | 是 | 渲染平台,取值:'ios'、'android'、'web' | web |
custom-init | function | android、ios、web | 否 | 创建地图成功后的回调,返回地图对象 map,可以调用地图提供的方法,map 的详情请参照下方options结构说明 | — |
icon-to-img-map | object | android、ios | 否 | 原生端不支持字体图标,通过这个对象将字体图标转换为图片 | {iconicn_point:"https://resources-public.myfuwu.com.cn/rental/image/1618543539086/6XAEA4HJ.png",iconicn_subway:"https://resources-public.myfuwu.com.cn/rental/image/1618543626396/JWc2Gsnr.png",} |
map-version | string | web | 否 | web 端加载高德地图的版本 | 1.4.15 |
map-config结构说明
参数 | 类型 | 平台 | 必填 | 说明 | 默认值 |
---|---|---|---|---|---|
zoom | number | android、ios、web | 否 | 初始缩放值 | 3 |
position | array | android、ios、web | 否 | 创建地图时初始中心点经纬度longitude, latitude | - |
webElementRegion | string[] | android | 是 | 屏幕中 web 元素的唯一的 class,用来解决 webView 和 nativeView 的事件分发问题 | - |
nativeViewRegion | string | android | 是 | 地图组件的唯一 class,用来解决 webView 和 nativeView 的事件分发问题 | - |
mapKey | string | web | 是 | web 地图加载时用到的高德地图 key | - |
minZoomLevel | float | android、ios、web | 否 | 最小缩放级别 | 3 |
maxZoomLevel | float | android、ios、web | 否 | 最大缩放级别 | 19 |
pointsData | object[] | android、ios、web | 是 | 绘制地图覆盖物的数据源,详情请参照下方options结构说明 | - |
pointsData结构说明
// 示例
[
{
id: "1", // 唯一id
type: "icon", // 图标类型
position: [113.93808453072029, 22.527625825601213], // 位置[longitude, latitude]
icon: "iconicn_point", // 普通状态下的icon
selectIcon: "iconicn_point_active", // 选中状态下的icon
},
{
id: "2",
type: "iconText", // 图标文本类型
position: [113.95380898080109, 22.534244422535767],
icon: "iconicn_subway", // 普通状态下的icon
selectIcon: "iconicn_subway_active", // 选中状态下的icon
text: "丽雅查尔顿酒店",
},
{
id: "3",
type: "polyline", // 线类型
strokeOpacity: 1.0,
strokeColor: "#0D86FF",
selectStrokeColor: "#EB3B3B",
strokeWeight: 4.0,
path: [
[113.94667966936146, 22.53063229103582],
[113.93727852692508, 22.52368523762034],
],
},
{
id: "4",
type: "polygon", // 面类型
fillOpacity: 0.35,
fillColor: "#0D86FF",
selectFillColor: "#EB3B3B",
strokeOpacity: 1.0,
strokeColor: "#0D86FF",
selectStrokeColor: "#EB3B3B",
strokeWeight: 4.0,
path: [
[113.9370357870134, 22.54519791844932],
[113.9430157719098, 22.545289575836016],
[113.93965630517611, 22.541078227653045],
],
},
{
id: "5",
type: "circle", // 圆类型
position: [113.9335140466371, 22.530198729807303],
title: "深圳大学",
content: "深圳大学学生楼",
},
{
id: "6",
type: "bubble", // 气泡类型
position: [113.9462531981354, 22.527126599830584],
title: "科苑",
count: 5,
opacity: 0.9,
selectColor: "#EB3B3B",
},
];
map方法
下面的所有方法都支持 callback 与 promise 回调
- 获取当前地图视图中的城市信息
- 定位到当前位置
- 设置地图的中心点
- 获取地图缩放级别
- 设置地图缩放级别
- 移动地图
- 同时设置地图缩放级别和中心点
- 调整地图到合适位置
- 切换图层
- 绘制建筑物图层
- 设置地图的旋转角度
- 获取地图的旋转角度
- 设置地图倾斜度
- 获取地图倾斜度
获取当前地图视图中的城市信息
map.getCity(callback)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callback(city) | function | 否 | city 为获取到的城市信息,详情请参照下方city结构说明 |
city结构说明
参数 | 类型 | 说明 |
---|---|---|
province | string | 省 |
city | string | 市 |
district | string | 区 |
latitude | float | 纬度 |
longitude | float | 经度 |
// 示例
map.getCity(function(city) {
console.log("getCity", city);
});
定位到当前位置
mGaoDeMapTCRender.geolocationCurrent(show, callback)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
show | boolean | 是 | 为true 时定位到当前位置,为false 时取消定位到当前位置,默认为true |
callback(loc) | function | 否 | loc为经纬度信息,{"longitude": xxx,"latitude": xxx} |
注:设为false时,iOS会回到当前位置,Android位置不会变更
// 示例
mGaoDeMapTCRender.geolocationCurrent(
true,
function(loc) {
console.log(loc);
}
);
设置地图的中心点
map.setCenter(lonLat)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
lonLat | array | 否 | 经纬度longitude, latitude |
// 示例
map.setCenter([121.501654, 31.238068]);
获取地图缩放级别
map.getZoom(callback)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callback(zoom) | function | 否 | zoom 为地图缩放级别 |
// 示例
map.getZoom(function(zoom) {
console.log("getZoom", zoom);
});
设置地图缩放级别
map.setZoom(zoom)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
zoom | number | 是 | 地图缩放级别 |
// 示例
map.setZoom(3);
移动地图
map.panBy(dx, dy)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
dx | number | 是 | 垂直方向移动距离 |
dy | number | 是 | 水平方向移动距离 |
// 示例
map.panBy(100, 100])
同时设置地图缩放级别和中心点
map.setZoomCenter(zoom, lonLat)
当需要同时修改地图缩放等级与地图中心点时请使用该方法,分开调用 setCenter 与 setZoom 在 android 会有定位不准的问题!
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
zoom | float | 是 | 设置地图缩放级别 |
lonLat | array | 是 | lonLat 数组固定长度为 2,array[0] 为经度,array[1] 为纬度 |
// 示例
map.setZoomCenter(3.0, [121.501654, 31.238068]);
调整地图到合适位置
map.setFitView()
// 示例
map.setFitView();
切换图层
map.setMapType(type)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
type | int | 否 | 图层类型。1:导航地图;2:夜景地图;3:普通地图;4:卫星图。不传或传其他值将默认显示普通地图。 |
绘制建筑物图层
map.renderBuildings(overlays)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
overlays | array | 是 | 需要绘制的建筑物图层内容,单个建筑物图层详情请参照下方overlay结构说明 |
overlay结构说明
// 示例
map.renderBuildings(
[
{
"sideColor": "#E6B0E2FF", // 设置建筑物侧面颜色值
"topColor": "#E65EB9FF", // 设置建筑物顶部颜色值
"path": [ // 设置建筑物围栏坐标列表
[
113.95420058331057,
22.540868895523726
],
[
113.95418985447468,
22.54258813461517
],
[
113.95774109914964,
22.542944861657737
],
[
113.95750506476037,
22.540911009705425
]
]
},
{
"sideColor": "#E6FFF0A3", // 设置建筑物侧面颜色值
"topColor": "#E6FFD752", // 设置建筑物顶部颜色值
"path": [ // 设置建筑物围栏坐标列表
[
113.957941,
22.542938
],
[
113.958821,
22.543076
],
[
113.958778,
22.542284
],
[
113.957963,
22.541848
]
],
}
]
)
设置地图的旋转角度
mGaoDeMapTCRender.setBearing(bearing)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
bearing | float | 是 | 地图缩放级别 |
// 示例
mGaoDeMapTCRender.setBearing(3.0);
获取地图的旋转角度
mGaoDeMapTCRender.getBearing(callback)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callback(bearing) | function | 是 | bearing : 地图旋转角度。以角度为单位,正北方向为0度,逆时针范围从0度到360度。 |
// 示例
mGaoDeMapTCRender.getBearing(
function (bearing) {
console.log('getBearing', bearing);
}
);
设置地图倾斜度
mGaoDeMapTCRender.setTilt(tilt)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
tilt | float | 是 | 地图倾斜度(可支持范围是0 - 60 ) |
// 示例
mGaoDeMapTCRender.setTilt(3.0);
获取地图倾斜度
mGaoDeMapTCRender.getTilt(callback)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callback(tilt) | function | 是 | tilt : 地图倾斜度。以角度为单位,范围(0,60)。 |
// 示例
mGaoDeMapTCRender.getTilt(
function (tilt) {
console.log('getTilt', tilt);
}
);
Map Event
event | 说明 |
---|---|
zoomChange | 地图缩放事件,格式为{"event": "zoomChange", "zoom": 3.0} ,其中 zoom 为缩放的级别 |
moveEnd | 地图拖动事件,格式为{"event": "moveEnd"} |
layerClick | 覆盖物点击事件,格式为{"event": "layerClick", "data": {}} ,其中 data 为渲染覆盖物时传入的参数 |
mapClick | 地图点击事件,格式为{"event": "mapClick"} |
特别说明
- 由于 android 实现方案的问题,当前页面元素变化时需要同时更新 webElementRegion 的值。
- 需要重新刷新地图上的覆盖物时,更新 pointsData 的值即可