返回顶部
首页 > 资讯 > 精选 >微信小程序怎么使用自定义组件封装原生image组件
  • 123
分享到

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

2023-06-26 09:06:40 123人浏览 安东尼
摘要

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

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

常规操作

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

1.1.相同默认图

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

<view    wx:for="{{ obj.arr }}"    wx:key="imgSrc"    wx:for-item="item"    wx:for-index="itemIdx"><image        src="{{ item.imgSrc }}"        binderror="onImageError"        data-img-path="obj.arr[{{ itemIdx }}].imgSrc"    /></view>复制代码
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 来标识默认图的类型。

<!-- 球队图 --><image    ...    data-img-type="team"/><!-- 球员图 --><image    ...    data-img-type="player"/>复制代码
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 的属性来传递模板数据的路径前缀。

<!--    球员排行模板    pathPrefix: String    playerList: Array    ...--><template name="srPlayerRank"><view        wx:for="{{ playerList }}"        wx:key="imgSrc"        wx:for-item="item"        wx:for-index="itemIdx"    ><image            src="{{ item.imgSrc }}"            binderror="onImageError"            data-img-type="player"            data-img-path="{{ pathPrefix }}.playerList[{{ itemIdx }}].imgSrc"        /></view></template>复制代码

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

自定义组件

2.1.原生自定义组件

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

  • Tuaimage.json

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

<!-- 加载中的图片 --><image    hidden="{{ !isLoading }}"    src="{{ errSrc }}"    style="width: {{ width }}; height: {{ height }}; {{ styleStr }}"    mode="{{ imgMode }}"/><!-- 实际加载的图片 --><image    hidden="{{ isLoading }}"    src="{{ imgSrc || src }}"    mode="{{ imgMode }}"    style="width: {{ width }}; height: {{ height }}; {{ styleStr }}"    bindload="_onImageLoad"    binderror="_onImageError"    lazy-load="{{ true }}"/>复制代码
  • 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。

<config>{    "component": true}</config><template lang="wxml"><!-- 加载中的图片 --><image        hidden="{{ !isLoading }}"        src="{{ errSrc }}"        style="{{ imgStyleStr }}"        mode="{{ imgMode }}"    /><!-- 实际加载的图片 --><image        hidden="{{ isLoading }}"        src="{{ imgSrc || src }}"        mode="{{ imgMode }}"        style="{{ imgStyleStr }}"        bindload="_onImageLoad"        binderror="_onImageError"        lazy-load="{{ true }}"    /></template><script>// 也可以设置为网络图片如: https://file.lsjlt.com/upload/202306/25/2shxsruvywo.pnGConst DEFAULT_IMG = '/assets/your_default_img'export default {    props: {        // 图片地址        src: String,        // 图片加载中,以及加载失败后的默认地址        errSrc: {            type: String,            // 默认是球队图标            default: DEFAULT_IMG,        },        width: {            type: String,            default: '48rpx',        },        height: {            type: String,            default: '48rpx',        },        // 样式字符串        styleStr: {            type: String,            default: '',        },        // 图片裁剪、缩放的模式(详见文档)        imgMode: {            type: String,            default: 'scaleToFill',        },    },    data () {        return {            imgSrc: '',            isLoading: true,        }    },    computed: {        // 样式字符串        imgStyleStr () {            return `width: ${this.width}; height: ${this.height}; ${this.styleStr}`        },    },    methods: {        // 加载图片出错        _onImageError (e) {            this.imgSrc = this.errSrc            this.$emit('onImageError', e)        },        // 加载图片完毕        _onImageLoad (e) {            this.isLoading = false            this.$emit('onImageLoad', e)        },    },}</script><style lang="sCSS"></style>复制代码

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

--结束END--

本文标题: 微信小程序怎么使用自定义组件封装原生image组件

本文链接: https://lsjlt.com/news/308349.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微信小程序怎么使用自定义组件封装原生image组件
    本文小编为大家详细介绍“微信小程序怎么使用自定义组件封装原生image组件 ”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么使用自定义组件封装原生image组件 ”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-06-26
  • 微信小程序怎么自定义组件
    这篇文章主要讲解了“微信小程序怎么自定义组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序怎么自定义组件”吧!组件模版和样式类似于页面,自定义组件拥有自己的 wxml&n...
    99+
    2023-06-26
  • 微信小程序怎么自定义组件Component使用
    本篇内容介绍了“微信小程序怎么自定义组件Component使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1- 前言在本文中你将收获小程序...
    99+
    2023-07-05
  • 小程序怎么自定义tabBar组件封装
    这篇文章主要介绍“小程序怎么自定义tabBar组件封装”,在日常操作中,相信很多人在小程序怎么自定义tabBar组件封装问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序怎么自定义tabBar组件封装”的疑...
    99+
    2023-06-25
  • 小程序自定义tabBar组件封装
    本文实例为大家分享了小程序自定义tabBar组件封装的具体代码,供大家参考,具体内容如下 1、新建组件:在component下新建一个tabBar 2、组件的index.wxml结...
    99+
    2024-04-02
  • 微信小程序自定义tabbar组件
    本文实例为大家分享了微信小程序自定义tabbar组件的具体代码,供大家参考,具体内容如下 由于项目需求,必须自己写组件: 第一步:在App.json中配置tabBar,自定也组件也必...
    99+
    2024-04-02
  • 【微信小程序】自定义组件(一)
    🎁写在前面: 观众老爷们好呀,这里是前端小刘不怕牛牛频道,小程序系列文章又更新了呀。 今天牛牛带来的是微信小程序的自定义组件入门知识,赶紧拿起小本本做笔记呀! ...
    99+
    2023-09-05
    微信小程序 前端 小程序
  • 【微信小程序】自定义组件(二)
    🎁写在前面: 观众老爷们好呀,这里是前端小刘不怕牛牛频道,小程序系列文章又更新了呀。 上文我们讲解了微信小程序自定义组件的入门知识,那么今天牛牛就来讲讲自定义组件的进阶知识吧,...
    99+
    2023-09-01
    微信小程序 小程序 前端
  • 微信小程序image组件库怎么用
    今天小编给大家分享一下微信小程序image组件库怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。微信小程序image图片...
    99+
    2023-06-26
  • 微信小程序自定义波浪组件怎么用
    这篇文章主要为大家展示了“微信小程序自定义波浪组件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序自定义波浪组件怎么用”这篇文章吧。先看看效果图:...
    99+
    2024-04-02
  • 微信小程序怎么自定义地址组件
    本文小编为大家详细介绍“微信小程序怎么自定义地址组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么自定义地址组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。项目需求需要调用后台传过来的地址,存储...
    99+
    2023-07-02
  • 微信小程序自定义地址组件
    本文实例为大家分享了微信小程序自定义地址组件的具体代码,供大家参考,具体内容如下 项目需求 需要调用后台传过来的地址,存储地址时存的是地址的id,所以市面上的地址组件均不符合我的需求...
    99+
    2024-04-02
  • 微信小程序如何实现自定义组件封装及父子间组件传值
    小编给大家分享一下微信小程序如何实现自定义组件封装及父子间组件传值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先在我们可以直...
    99+
    2024-04-02
  • 微信小程序如何自定义tabbar组件
    这篇文章主要讲解了“微信小程序如何自定义tabbar组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序如何自定义tabbar组件”吧!由于项目需求,必须自己写组件:第一步:在App...
    99+
    2023-06-14
  • 微信小程序中如何自定义组件
    这篇文章将为大家详细讲解有关微信小程序中如何自定义组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在微信小程序开发过程中,对于一些可能在多个页面都使用的页面模块,可以把它封装成一个组件,以提高开发效率。...
    99+
    2023-06-29
  • 微信小程序自定义组件(超详细)
    💌写在开头: 哈喽呀,亲爱的宝子们。 今天要介绍的是关于小程序自定义组件的相关内容。 主要分以下几个部分:组件的创建,组件的结构,组件的引用,组件样式,组件的生命周期等。 ...
    99+
    2023-09-09
    微信小程序 小程序 前端
  • 微信小程序中怎么自定义一个components组件
    本篇文章为大家展示了微信小程序中怎么自定义一个components组件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。小程序自定义组件找到components目录,没...
    99+
    2024-04-02
  • 微信小程序自定义顶部导航组件
    本文实例为大家分享了微信小程序自定义顶部导航组件,供大家参考,具体内容如下 在components中新建文件夹navbar components/navbar.wxml <!-...
    99+
    2024-04-02
  • 微信小程序实现自定义拍摄组件
    微信小程序实现自定义摄像头(在摄像头内添加提示信息),供大家参考,具体内容如下 摄像头组件(wxml) <!-- 拍照功能 自定义摄像头           bindtap:t...
    99+
    2024-04-02
  • 微信小程序组件间关系怎么定义和使用
    这篇文章主要介绍“微信小程序组件间关系怎么定义和使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序组件间关系怎么定义和使用”文章能帮助大家解决问题。  组件间关系  定义和使用组件间关系 ...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作