s***@163.com
s***@163.com
  • 发布:2026-01-26 16:27
  • 更新:2026-01-26 20:53
  • 阅读:25

uniappx开发高德地图标准模式组件IOS出现问题

分类:uni-app x
<template>  
    <native-view :id="fixedId" @init="onViewInit" @ready="onReady" @mapclick="mapClick" @camerachange="onCameraChange"  
        @camerafinish="onCameraChangeFinish" @markertap="onMarkerClick"></native-view>  
</template>  
<script setup lang="uts">  
    import { NativeAmap } from "@/uni_modules/jiannor-harmony-amap";  

    let amap : NativeAmap | null = null  
    const fixedId = ref('')  

    function updateOption(amap : NativeAmap | null) {  
        let options : UTSJSONObject = {  
            id: fixedId.value,  
            appKey: props.appKey,  
            showLocation: props.showLocation,  
            // width: normalizeLength(props.width),  
            // height: normalizeLength(props.height),  
            // name: props.name  
        }  
        amap?.updateOptions(options)  
    }  

    function onViewInit(e : UniNativeViewInitEvent) {  
        amap = new NativeAmap(e.detail.element);  

        updateOption(amap)  
    }  

    onUnload(()=>{  
        amap?.destroy()  
    })  
</script>  
<style>  
</style>  

import {MAMapView} from "MAMapKit"  

import { ComponentPublicInstance } from 'vue'  
import {  
    AddCircleOptions, AddMarkerOptions, AddPolygonOptions, AddPolylineOptions, CreateNativeAmapContext, ICameraPosition, ICircleItem, IMarkerItem, INativeAmapContext, IPolygonItem, IPolylineItem, NativeAmapOptions, UniAmapCircle,  
    UniAmapMarker, UniAmapPolygon, UniAmapPolyline,, UniCalculateZoom, UniCalculateZoomToSpanLevel  
} from "../interface.uts"  

export * from "../interface.uts"  

export class NativeAmap {  
    $element : UniNativeViewElement  
    mapView : MAMapView | null = null  
    constructor(element : UniNativeViewElement) {  
        this.$element = element  
        super.init()  
        this.bindView()  
    }  
    bindView() {  
        this.mapView = new MAMapView()  
        this.$element.bindIOSView(this.mapView!);  
    }  

    updateOptions(item : UTSJSONObject) : void {  
        let options = JSON.parseObject<NativeAmapOptions>(JSON.stringify(item)!)!  
    }  

    destroy(){  
        UTSiOS.destroyInstance(this.mapView!)  
    }  
}  

他出现了[plugin:uts] "NativeAmap" is not exported by "../../../../../../Users/jiannor/uniappProject/xmap/uni_modules/jiannor-harmony-amap?uts-proxy", imported by "../../../../../../Users/jiannor/uniappProject/xmap/uni_modules/jiannor-harmony-amap/components/jiannor-harmony-amap/jiannor-harmony-amap.uvue?vue&type=script&setup=true&lang.uts".
16:13:07.026 at uni_modules/jiannor-harmony-amap/components/jiannor-harmony-amap/jiannor-harmony-amap.uvue:2:9
16:13:07.026 1: import { defineComponent as _defineComponent } from 'vue'
16:13:07.026 2: import { NativeAmap } from "@/uni_modules/jiannor-harmony-amap";
16:13:07.026 ^
16:13:07.026 3:
16:13:07.026 4: export type NativeAmapOptions= {,
打自定义基座出现
[uts] ../../../../../../Users/jiannor/uniappProject/xmap/uni_modules/jiannor-harmony-amap/components/jiannor-harmony-amap/jiannor-harmony-amap.uvue?vue&type=script&setup=true&lang.uts (3:9): "NativeAmap" is not exported by "../../../../../../Users/jiannor/uniappProject/xmap/uni_modules/jiannor-harmony-amap?uts-proxy", imported by "../../../../../../Users/jiannor/uniappProject/xmap/uni_modules/jiannor-harmony-amap/components/jiannor-harmony-amap/jiannor-harmony-amap.uvue?vue&type=script&setup=true&lang.uts".
[HBuilder] 16:17:14.309 file: /Users/jiannor/uniappProject/xmap/uni_modules/jiannor-harmony-amap/components/jiannor-harmony-amap/jiannor-harmony-amap.uvue?vue&type=script&setup=true&lang.uts:3:9
[HBuilder] 16:17:14.309 1: import { defineComponent as _defineComponent } from 'vue';
[HBuilder] 16:17:14.309 2: import { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
[HBuilder] 16:17:14.309 3: import { NativeAmap } from "@/uni_modules/jiannor-harmony-amap";
[HBuilder] 16:17:14.309 ^
[HBuilder] 16:17:14.309 4:
[HBuilder] 16:17:14.309 5: import { ref, watchEffect, onUnload } from 'vue';
我的依赖配置如下:
{
"frameworks": [
"libz.1.2.5.tbd"
],
"deploymentTarget": "12",
"dependencies-pods": [{
"name": "AMap3DMap-NO-IDFA",
"version": "10.1.600"
},
{
"name": "AMapSearch-NO-IDFA",
"version": "9.7.4"
},
{
"name": "AMapLocation-NO-IDFA",
"version": "2.11.0"
}
]
},请各位帮助,demo已传附件

2026-01-26 16:27 负责人:无 分享
已邀请:
s***@163.com

s***@163.com (作者)

照着小助手说的改,但是报错依旧没变

DCloud_UNI_yuhe

DCloud_UNI_yuhe

NativeAmap是怎么用的?

Ask小助手

Ask小助手

该问题请在专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

问题原因
uni-app x 在编译阶段会为每个 uni_modules 生成一个“uts-proxy”入口(uni_modules/xxx?uts-proxy)。
只有在这个入口里 显式 export 的符号,才能在页面/组件里通过
import { xxx } from '@/uni_modules/xxx' 的方式被引用。
目前你的插件目录里并没有把 NativeAmap 类 export 出去,所以编译器提示
“NativeAmap is not exported by …/xxx?uts-proxy”。

解决步骤

  1. 在插件根目录(uni_modules/jiannor-harmony-amap)下新建或修改入口文件
    (文件名固定为 index.uts,与平台无关的公共导出都写在这里)。

    // uni_modules/jiannor-harmony-amap/index.uts  
    export { NativeAmap } from './utssdk/app-ios/index.uts'  
    // 如果 Android、Harmony 也有同名类,也可以一起导出  
    // export { NativeAmap } from './utssdk/app-android/index.uts'  
  2. 确认 utssdk/app-ios/index.uts 里确实有

    export class NativeAmap { … }  
  3. 重新打包自定义基座(iOS)或重新运行到手机。
    页面代码保持不变即可正常通过编译:

    import { NativeAmap } from '@/uni_modules/jiannor-harmony-amap'  

补充说明

  • 如果插件还打算支持 Android/Harmony,需要把对应平台的 NativeAmap 类也 export 出来,
    并用条件编译 #ifdef APP-IOS / #ifdef APP-ANDROID / #ifdef APP-HARMONY 区分。
  • 仅放在 components/xxx/xxx.uvue 里的类不会自动成为可被外部引用的 API;
    必须通过 index.uts 显式导出。
内容为 AI 生成,仅供参考

要回复问题请先登录注册