uniapp之实战踩坑笔记

2022-03-11  本文已影响0人  锋叔

uniapp坑之多可谓是漫天星辰,但既然踏上了这条贼船,你也只能是披荆斩棘一往无前。自小白接触此框架以来,踩过了无数坑,就在此进行一个记录,给后来者一些警示及经验。

后续会持续更新,因为坑无穷尽也。

tabbar没有双击事件咋办

// tabbar菜单点击事件
onTabItemTap(e) {
    // tab 点击时执行,此处直接接收单击事件
    if (this.tabClick) { // 200ms 内再次点击
        // 这里就是模拟的双击事件,可以写类似数据刷新相关处理
    }
    this.tabClick = true
    setTimeout(() => {
        this.tabClick = false // 200ms 内没有第二次点击,就当作单击
    }, 200)
},

上拉加载多次触发

小程序和苹果手机对v-show的不支持,要么不显示要么一直显示

Vue2才支持的$on $off $emit $once

初见以为是女神,真整起来发现不过如此
无非是封装了一个漏洞百出的全局钩子!!!说是可以组件数据通讯,其实一堆儿坑。
当你使用非除开原生返回路由和navigateTo以外当钩子时,都会无效!!也许是我太菜,大神们不知道有没有解决redirectTo跳转后无效的办法。
Vue3移除了!可能有了更好的替代方案。

使用

father.vue

<template>
    <view class="card-container">
        <view class="card-form">
            <u-form :model="dataForm" label-position="left" ref="dataForm" label-width="130rpx"
                :label-style="{'fontSize': '14px'}" :error-type="errorType">
                <u-form-item label="姓名" prop="name">
                    <u-input v-model="dataForm.name" maxlength="30" placeholder="请输入姓名" />
                </u-form-item>
                <u-form-item label="手机号" prop="phone">
                    <u-input v-model="dataForm.phone" maxlength="11" placeholder="请输入手机号" />
                </u-form-item>
            </u-form>
        </view>
        <view class="card-container-footer">
            <button @click="submit" class="footer-btn" type="default">提交</button>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                dataForm: {
                    name: null,
                    phone: null
                },
            }
        },
        onUnload() {
            // 移除监听事件  
            uni.$off('setAddress');
        },
        onLoad() {
            uni.$on('setAddress', this.setAddress); // 绑定事件
        },
        methods: {
            async setAddress(dataForm) {
                this.dataForm = dataForm
            },
            // 提交修改或者保存
            async submit() {
            // 跳转去子路由
            }
        }
    }
</script>

child.vue

<template>
    <view class="card-container">
        <view class="card-container-footer">
            <button @click="setAddress" class="footer-btn" type="default">给父组件传值</button>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            }
        },
        methods: {
            // 提交修改或者保存
            async setAddress() {
                let address = {
                    address: "测试双向绑定",
                    addressId: 12,
                    area: "测试双向绑定",
                    default: 1,
                    name: "zdf",
                    phone: "13412311233",
                }
                uni.$emit('setAddress', address);
                uni.navigateBack({
                    delta: 1
                });
                
            }
        }
    }
</script>

上一篇下一篇

猜你喜欢

热点阅读