混合编译模式下,原生支付宝小程序打入uni-app编译的分包,地图组件标记点和气泡事件丢失

发布于 1周前 作者 nodeper 来自 Uni-App

混合编译模式下,原生支付宝小程序打入uni-app编译的分包,地图组件标记点和气泡事件丢失

开发环境 版本号 项目创建方式
Windows w11 HBuilderX

操作步骤:

支付宝小程序混合编译分包
node_modules/@dcloudio/uni-mp-alipay/dist/index.js:2092

预期结果:

地图标记和气泡事件正常点击

实际结果:

事件丢失

bug描述:

混合编译模式下,原生支付宝小程序打入uniapp编译的分包,地图组件标记点和气泡事件丢失
临时使用一个mixins解决:

// issue: uni-app支付宝小程序分包bug,node_modules/@dcloudio/uni-mp-alipay/dist/index.js:2092  
// 分包属性丢失,地图标点Market、气泡CallOut点击事件无效,此文件临时兼容处理此问题  

export default {  
    // #ifdef MP-ALIPAY  
    created() {  
        // 法一,根据组件路由补充注册事件  
        let subPath = 'sub'; // 分包路径  
        if (subPath) {  
            let path = this.$scope.is || this.$scope.route;  
            if (path.indexOf('/') === 0) {  
                path = path.substr(1);  
            }  
            my.specialMethods = my.specialMethods || {};  
            my.specialMethods[path] = ['clickCallOut', 'clickMarker'];  
        }  

        // 法二,白名单路由补充注册事件  
        // if (subPath.indexOf('/') === 0) {  
        //     subPath = subPath.substr(1);  
        // }  
        // if (subPath) {  
        //     my.specialMethods = {  
        //         [`${subPath}/packages/xxx/xxxx`]: ['clickCallOut', 'clickMarker'],  
        //         [`${subPath}/pages/xxx/xxx`]: ['clickCallOut', 'clickMarker'],  
        //     };  
        // }  
    },  
    mounted() {  
        console.log('zfb map mounted');  
    },  
    methods: {},  
    // #endif  
};

1 回复

在混合编译模式下,将原生支付宝小程序打入 uni-app 编译的分包时,可能会遇到地图组件标记点和气泡事件丢失的问题。这通常是由于 uni-app 和原生支付宝小程序的编译机制、事件绑定方式或组件生命周期存在差异导致的。以下是一些可能的解决方案和排查步骤:


1. 检查编译模式和分包配置

  • 确保 uni-app 的分包配置正确,原生支付宝小程序的代码能够正常编译并集成到分包中。
  • 检查 manifest.json 中的分包配置,确保路径和文件结构正确。

2. 确认地图组件的使用方式

  • uni-app 和原生支付宝小程序的地图组件(如 map)在使用方式上可能存在差异。确保在 uni-app 中正确使用 map 组件,并按照支付宝小程序的文档设置标记点(markers)和气泡(callout)。
  • 例如,原生支付宝小程序的地图组件可能需要特定的属性或事件绑定方式,而这些在 uni-app 中可能需要适配。

3. 事件绑定的兼容性

  • uni-app 的事件绑定方式可能与原生支付宝小程序不同。例如,uni-app 使用 @ 符号绑定事件,而原生支付宝小程序使用 bindcatch
  • 检查事件绑定是否正确,例如 markertap(标记点点击事件)和 callouttap(气泡点击事件)是否在 uni-app 中被正确触发。

4. 生命周期差异

  • uni-app 和原生支付宝小程序的生命周期可能存在差异,导致地图组件的初始化或事件绑定失败。
  • 确保在地图组件初始化后再设置标记点和气泡,例如在 onReadyonLoad 生命周期中执行相关操作。

5. 调试和日志输出

  • 使用 console.log 或调试工具,检查地图组件的初始化过程、标记点和气泡的设置是否成功。
  • 检查事件是否被正确触发,例如在 markertapcallouttap 事件中添加日志输出。

6. 使用原生代码

  • 如果 uni-app 的地图组件无法满足需求,可以尝试在分包中直接使用原生支付宝小程序的代码。
  • 在分包中编写原生支付宝小程序的页面和逻辑,确保地图组件的功能正常。

7. uni-app 插件或自定义组件

  • 如果 uni-app 的地图组件功能有限,可以尝试使用 uni-app 插件或自定义组件,或者自行封装一个兼容的地图组件。
  • 参考 uni-app 官方文档和社区资源,寻找适合的解决方案。

示例代码

以下是一个简单的 uni-app 地图组件示例,确保标记点和气泡事件正常:

<template>
  <view>
    <map
      id="myMap"
      :latitude="latitude"
      :longitude="longitude"
      :markers="markers"
      @markertap="onMarkerTap"
      @callouttap="onCalloutTap"
    ></map>
  </view>
</template>

<script>
export default {
  data() {
    return {
      latitude: 39.90469,
      longitude: 116.40717,
      markers: [
        {
          id: 1,
          latitude: 39.90469,
          longitude: 116.40717,
          title: '北京市',
          callout: {
            content: '点击查看详情',
          },
        },
      ],
    };
  },
  methods: {
    onMarkerTap(e) {
      console.log('标记点点击事件', e);
    },
    onCalloutTap(e) {
      console.log('气泡点击事件', e);
    },
  },
};
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!