一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

商城系統 注冊

微信小程序之如何使用自定義組件封裝原生image組件

2018-08-16|HiShop
導讀:小程序原生組件image組件沒有常用的功能,所以以下小編為大家介紹微信小程序之如何使用自定義組件封裝原生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://developers.weixin.qq.com/miniprogram/dev/component/image.html
 */

// 也可以設置為網絡圖片如: https://foo/bar.png
const 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>
復制代碼

HiShop小程序工具提供多類型商城/門店小程序制作,可視化編輯 1秒生成5步上線。通過拖拽、拼接模塊布局小程序商城頁面,所看即所得,只需要美工就能做出精美商城。更多小程序商店請查看:小程序商店


電話咨詢 預約演示 0元開店
主站蜘蛛池模板: 国产高清=av首播原创麻豆|国产h色视频在线观看|成年人网站免费在线观看|#NAME?|免费看黄色片子|亚洲一区在线 特级毛片内射www无码|日韩激情无码激情=a片免费软件|伊人狠狠色丁香婷婷综合动态图|高清性色生活视频|色噜噜狠狠狠狠色综合久一|久久精品免费视频播放 | 嗯嗯嗯在线观看|亚洲国产欧美日本视频|国产成人综合色就色综合|国产精品自拍500|国产精品91一区二区三区|免费黄色成人 | 亚洲=aV永久综合在线观看另类|#NAME?|日本亚洲精品成人欧美一区|久草精品在线播放|国产亚洲综合视频|亚洲精彩视频在线 | 亚洲=a级大片|青草伊人久久综在合线亚洲观看|我爱=av网站|91福利视频免费观看|果冻传媒剧国产免费入口今日更新|老师露双奶头无遮挡挤奶视频 | 汉服女装齐胸襦裙被c到喷水|h=aodi=aoc=ao这里只有精品视频|国产精华=av午夜在线观看免费|久久美女免费视频|www.91免费视频|#NAME? | 色综合天天综合高清网国产在线|国产精品九九九九|国产乱妇乱子|国产色情理论在线观看视频|久久影院精品|寂寞骚妇被后入式爆草抓爆 | 久久亚色|久99久精品免费视频热|欧美人伦禁忌DVD放荡欲情|幻女free性俄罗斯毛片|国产精品一区二区三区免费观看|亚洲精品乱码久久久久久中文字幕 | 完美世界免费观看完整在线观看|日韩黄色一级大片|粉嫩=aV久久一区二区三区王玥|三级全黄的视频在线观看|91亚洲精品丁香在线观看|色香蕉视频 | 日本一区二区三区四区视频|亚洲一区黄色|久久综合狠狠综合久久狠狠色综合|法国性xxxxx极品|久久无码=aV中文出轨人妻|无码少妇一区二区三区=av | 人人干狠狠操|欧美日韩xxxx|日本成人在线看|四虎影院免费在线|成人黄色亚洲|两个人看的www高清视频 | 欧美性生活在线观看|亚洲免费视频专区|国产精品2024|免费网站国产|欧美男男作爱G=aYWWW|国产伦精品一区二区三区视 | 成人国产午夜在线观看|久久综合九色综合97欧美|99视频免费观看|久久久久久久国产精品毛片|久久99精品国产99久久|天堂成人国产精品一区 | 成年人在线观看视频网站|亚洲影视久久|亚洲成在人网站无码天堂|国产色91在线|国产精品无人区一区二区三区|免费看=a在线观看 | 国产人妖在线|国产午夜福利在线播放|亚洲国产成人精品久久久国产成人|高柳の肉嫁动漫在线播放|日韩久久精品一区二区三区|精品偷自拍另类在线观看 | 91九色porny视频|亚洲4区|日本一区久久|中国老太卖婬HD播放|日本公妇被公侵犯中文字幕|www.youjizz视频 | 欧美高清福利|免费亚洲黄色|黄片毛片免费|亚洲欧美日韩在线资源观看|国产精品久久久久久久久久久久午|日本三级播放 | 午夜国产在线|国产人妻无码一区二区三区婷婷|中文字幕免费在线看|2021国产麻豆剧传媒精品入口|日日射夜夜|免费久久99精品国产 | 日韩性精品|一级黄色视|www.日本在线视频|鲁一鲁亚洲无线码|凸输偷窥xxxx自由免费视频|97人妻人人揉人人躁人人 | 日本少妇浓毛BBWBBWBBW|久久久久久成人网|亚洲中文有码字幕日本|老妇出水bbw高潮|色偷偷88888欧美精品久久久|日韩午夜精品 | 日本免费中文字幕|狠狠操综合网|国产一区二区=av在线|国产91精清纯白嫩高中在线观看|少妇特黄V一区二区三区|免费看荫蒂添的好舒服视频 | 爱如潮水日本|宅男噜噜噜66网站高清|午夜宅男在线永久免费观看网|日日日干|国产成人精品一区二区三区无码|国产成人高清在线观看播放 | 龙珠z国语版普通话免费播放|人妻阿敏被老外玩弄系列|久久露脸国语精品国产91|国产成人午夜精品影院观看视频|91视频一区二区|国产高清露脸孕妇系列 | 五月天婷婷色综合|91热国产|亚洲欧洲二区|日日插日日操|成人免费毛片高清视频|www.日韩在线观看 | 美女裸乳裸体无遮挡的网站|在线观看不卡视频|免费午夜看片|亚洲精品日韩一|一级中国黄色片|国产亚洲精久久久久久叶玉卿 | 91免费版视频|在线观看人成激情视频|午夜激情视频免费|91麻豆精品国产综合久久久|日韩精品1|夜夜爱视频 | 美女视频黄的全是免费|欧美丰满熟妇XXXX性PPX人交|色屁屁一区|#NAME?|国产特级毛片=a=a=a=a=a=a喷潮|免费高潮视频 | 伊人网视频在线|久久免费看少妇=a高潮一片黄特|99国产精品自在自在久久|久久国产最新|一级片网址|无码天堂亚洲国产=aV久久 | 另类综合视频|成人网在线观看|亚洲=a级|制服丝袜成人动漫|国产亚洲欧洲一区二区三区|99久热re在线精品99re8热视频 | 国产最新网站|亚洲美女一区|亚洲V欧美V国产V在线观看|国产精品乱码久久久久久1区2区|大地影视资源在线观看|国产精品扒开腿做爽爽爽日本无码 | 免费=av成人|無碼噴水國產高潮=aV|www.91麻豆|亚洲欧美视频一级|欧美一站二站|91在线日本 | 精品国产96亚洲一区二区三区|水蜜桃综合久久无码欧美|国产精品久久久久久久第一福利|成人无码免费视频在线观看网址|伊人wwwyiren22cn|极品尤物被啪到呻吟喷水 | 久久人人精品|亚洲综合欧美在线一区在线播放|高清欧美性猛交XXXX黑人猛交|国产欧美一区二区三区久久|黄色毛片=a|欧洲内射XXX高清 | 日韩=av无码精品一二三区|免费看成年视频|亚洲精品久久久蜜桃动漫|无码VR最新无码=aV专区|97久久久久人妻精品专区|一区精品在线观看 | 婷婷综合久久狠狠色99H|精品国偷自产在线视频99|999久久久无码国产精品|国产精品一区二三区|激情中文小说区图片区|国产亚洲日 | 久久久91视频|99三级|水蜜桃视频在线免费观看|黄色国产网站在线观看|含羞草家庭影院|久久久欧美国产精品人妻噜噜 | 老汉=av免费一区二区三区|国产又大又黑又粗免费视频|黄大片日本一级在线=a|成年人黄色毛片|亚洲精品一区二区三区免|国产精品91大屁股白浆一区二区 | 狂躁美女大bbbbbb在线观看|亚洲=aV日韩=aV无码=a琪琪|BBW极度另类孕妇|中文资源在线官网|久久久久国产精品熟女影院|狠狠老司机 | 亚洲精品无码成人=a片|国产美女口爆吞精普通话|国产精品国产三级国产专播i12|91精品国产一区自在线拍|日韩特级|成人在线免费观看小视频 | 免费视频99|性高湖久久久久久久久3小时|伦理一国产=a级|人妻少妇伦在线无码专区视频|国产人妻无人性无码秀列|毛片免费看网站 | 亚洲精品一二三|一本色道久久综合狠狠躁邻居|国产精品乱码一二三区的特点|国产粉嫩高中无套进入|亚洲欧美日韩愉拍自拍|2017男人天堂手机在线 | 99久久成人精品国产网站|九九在线|亚洲播播|快射视频在线观看|日本毛片在线|国产高清无码视频在线观看 国产精品二区影院|久久99热精品|一级黄片毛片免费|sihu在线|亚洲精品女|99vv1com这只有精品 |