小程序解析字符串拼接多图 点击放大展示

js 复制代码
detailsinfo: { // 逗号分隔的图片链接字符串(核心字段) 
    DocumentUrls: "http://192.168.0.28:53417/UpImg/20260330/20260330143414_583.png,http://192.168.0.28:53417/UpImg/20260330/20260330143416_482.png"
}
WXML 复制代码
<view class="details_item" bind:tap="previewDocImage" data-url="{{detailsinfo.DocumentUrls}}">
    <view class="details_item_title">图片:</view>
    <view class="details_item_info text-d">详情</view>
</view>
js 复制代码
  /**
 * 图片预览方法
 * 兼容:数组格式 / 逗号分隔字符串格式 的图片链接
 */
previewDocImage(e) {
  // 1. 从自定义属性中获取图片链接(容错获取,防止undefined报错)
  let url = e?.currentTarget?.dataset?.url || '';
  let urls = [];

  // 2. 格式兼容处理:数组直接用,字符串分割转数组
  if (Array.isArray(url)) {
    // 后端直接返回数组
    urls = url;
  } else if (typeof url === 'string') {
    // 后端返回逗号拼接字符串:分割 + 去空格 + 过滤空值
    urls = url.split(',').map(s => (s || '').trim()).filter(Boolean);
  }

  // 3. 兜底处理:如果dataset传参失败,直接从页面数据中获取
  if (!urls.length) {
    const detailsinfo = this.data.detailsinfo || {};
    const fallbackUrl = detailsinfo.DocumentUrls || '';
    
    if (Array.isArray(fallbackUrl)) {
      urls = fallbackUrl;
    } else if (typeof fallbackUrl === 'string') {
      urls = fallbackUrl.split(',').map(s => (s || '').trim()).filter(Boolean);
    }
  }

  // 4. 无图片时提示用户
  if (!urls.length) {
    wx.showToast({
      title: '暂无图片',
      icon: 'none',
    });
    return;
  }

  // 5. 调用微信原生图片预览API
  wx.previewImage({
    current: urls[0], // 默认显示第一张
    urls: urls, // 所有需要预览的图片链接
  });
},

点击详情后展示👇

① 容错获取传参

使用 ES6 可选链操作符 ?.,避免因 e/currentTarget/dataset 不存在导致代码报错,是小程序开发必备的容错写法。

② 格式兼容处理

  • 数组:直接赋值使用
  • 字符串:split(',') 分割成数组 + trim() 去空格 + filter(Boolean) 过滤空链接,保证数据纯净

③ 双层兜底保障

防止 data-url 传参失败,直接从页面 data 中重新获取图片链接,双重保险,绝不崩溃。

④ 无图友好提示

数组长度为 0 时,用 wx.showToast 提示用户,提升体验。

⑤ 调用原生预览

wx.previewImage 是微信官方 API:

  • current:当前显示的图片链接
  • urls:需要预览的所有图片数组
相关推荐
kyriewen38 分钟前
别再 console.log 了:5 个 Chrome DevTools 调试技巧,用过就回不去了
前端·javascript·面试
IT_陈寒2 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
To_OC2 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
DigitalOcean4 小时前
Laravel 开发者已在 DigitalOcean 上开通超过 10 万台服务器
前端·laravel
星始流年4 小时前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
李惟4 小时前
开源本地通信库,纯客户端 RPC,像聊天一样通信
前端
YAwu114 小时前
深入解析 React 炫彩鼠标跟随标题组件:从坐标定位到动画性能
前端·react.js
GuWenyue4 小时前
排序效率低?5分钟吃透快速排序,性能飙升至O(nlogn)
前端·javascript·面试
OpenTiny社区4 小时前
🎨 看完 GenUI SDK 源码我悟了!
前端·vue.js·github
叁两4 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js