千家信息网

微信小程序怎么使用自定义组件封装原生image组件

发表于:2026-11-05 作者:千家信息网编辑
千家信息网最后更新 2026年11月05日,本文小编为大家详细介绍"微信小程序怎么使用自定义组件封装原生image组件 ",内容详细,步骤清晰,细节处理妥当,希望这篇"微信小程序怎么使用自定义组件封装原生image组件 "文章能帮助大家解决疑惑
千家信息网最后更新 2026年11月05日微信小程序怎么使用自定义组件封装原生image组件

本文小编为大家详细介绍"微信小程序怎么使用自定义组件封装原生image组件 ",内容详细,步骤清晰,细节处理妥当,希望这篇"微信小程序怎么使用自定义组件封装原生image组件 "文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一常规操作

在小程序没还没推出自定义组件功能时,只能通过改变 Page 中的 data 来展示兜底的占位图,所以当时的处理方式十分蛋疼...

1.1.相同默认图

由于需要知道这个图片的数据路径,所以不得不在每个 image 上加上类似 data-img-path 的东西。

复制代码
const DEFAULT_IMG = '/assets/your_default_img'Page({    data: {        obj: {            arr: [                { imgSrc: 'your_img1' },                { imgSrc: 'your_img2' },            ],        },    },    onImageError ({        target: { dataset: { imgPath } },    }) {        this.setData({            [imgPath]: DEFAULT_IMG,        })    },})复制代码

1.2.不同默认图

如果默认图片不同呢?例如球员、球队和 feed 的默认图片一般都是不同的。

那么一般只好再增加一个属性例如 data-img-type 来标识默认图的类型。

复制代码
const DEFAULT_IMG_MAP = {    feed: '/assets/default_feed',    team: '/assets/default_team',    player: '/assets/default_player',}Page({    data: {        obj: {            arr: [                { imgSrc: 'your_img1' },                { imgSrc: 'your_img2' },            ],        },    },    onImageError ({        target: { dataset: { imgPath, imgType } },    }) {        this.setData({            [imgPath]: DEFAULT_IMG_MAP[imgType],        })    },})复制代码

1.3.图片在模板中

页面层级浅倒还好,如果跨模板了,那么模板就可能要用一个类似于 pathPrefix 的属性来传递模板数据的路径前缀。

复制代码

最后在失败回调里调用 setData({ [path]: DEFAULT_IMG }) 重新设置图片地址。

二自定义组件

2.1.原生自定义组件

原生写法一般要写4个文件:.json/.wxml/.js/.wxss

  • TuaImage.json

{    "component": true}复制代码
  • TuaImage.wxml

复制代码
  • TuaImage.js

const DEFAULT_IMG = '/assets/your_default_img'Component({    properties: {        // 图片地址        src: String,        // 图片加载中,以及加载失败后的默认地址        errSrc: {            type: String,            // 默认是球队图标            value: DEFAULT_IMG,        },        width: {            type: String,            value: '48rpx',        },        height: {            type: String,            value: '48rpx',        },        // 样式字符串        styleStr: {            type: String,            value: '',        },        // 图片裁剪、缩放的模式(详见文档)        imgMode: {            type: String,            value: 'scaleToFill',        },    },    data: {        imgSrc: '',        isLoading: true,    },    methods: {        // 加载图片出错        _onImageError (e) {            this.setData({                imgSrc: this.data.errSrc,            })            this.triggerEvent('onImageError', e)        },        // 加载图片完毕        _onImageLoad (e) {            this.setData({ isLoading: false })            this.triggerEvent('onImageLoad', e)        },    },})复制代码

布吉岛大家使用原生写法时有木有一些感觉不方便的地方:

  • 4个文件:.json/.wxml/.js/.wxss,这样老需要切来切去的降低效率

  • properties 是什么鬼?大家(React/Vue)一般不都用 props 么?

  • style="width: {{ width }}; height: {{ height }}; {{ styleStr }}" 样式字符串怎么辣么长...

2.2.TuaImage.vue

所以以下是一个使用单文件组件封装原生 image 组件的例子。

  • 使用单文件组件将配置、模板、脚本、样式写在一个文件中,方便维护。

  • 使用计算属性 computed 将样式字符串写在 js 中。

  • 使用 this.imgSrc = this.errSrc 而不是 this.setData 来改变 data。

{    "component": true}复制代码

读到这里,这篇"微信小程序怎么使用自定义组件封装原生image组件 "文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

图片 组件 代码 样式 地址 字符 字符串 文件 模板 程序 封装 不同 属性 文章 球队 内容 写法 图标 数据 文档 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 互联网科技有限公司图片 卓越科技(互联网 ) 云电互联网科技 互联网科技论坛 山东吉时兔互联网科技有限公司 中国的互联网科技企业的崛起 湖南诚度互联网科技有限公司 宁夏众和广鑫互联网科技有限公司 移动互联网年度科技创新 银川新华互联网科技学校联系电话 佛山市拉法互联网科技有限公司 互联网方面的科技前沿 锡山区互联网智能科技产品供应 南通创西澳互联网科技有限公司 美国互联网科技公司 半导体是互联网高科技吗 云鲸互联网络科技有限公司 山东蛋芒互联网科技有限公司 数字科技和互联网金融哪个好 湖北九亚互联网络科技有限公司 圆梦互联网科技 互联网科技战争 金融科技创新监管互联网金融 中资互联网科技 深圳前海聚择互联网科技有限公司 苏州铭阳互联网科技有限公司 想开互联网科技公司怎么样 互联网行业科技股 山东星卡互联网科技有限公司官网
0