uniapp遇到的问题

1.uniapp u-popup弹窗内嵌from表单组件时报错,规则找不到

<u-popup mode="center" v-model="show">
        
        <view class="" style="padding: 30upx;">
            <u-form :model="form" ref="uForm" >
                <u-form-item label="姓名" prop="name" >
                 <u--input v-model="uForm.name" border="none" placeholder="用户名"></u--input>
                </u-form-item>
            </u-form>
            <view class="" style="display: flex;">
                <u-button size="mini" @click="submit">提交</u-button>
                <u-button size="mini" style="margin-left: 20upx;" @click="resetSubmit">取消</u-button>
            </view>
        </view>
        
    </u-popup>

规则:

show :false,
form :{},
rules:{
            name: [
                { 
                    required: true, 
                    message: '请输入姓名',  
                    trigger: ['change'],
                }
            ],
        },

如上面的代码所示,弹窗内嵌套了一个表单组件,这个时候如果根据官方文档去写 在 onReady 加载表单规则,就会报错提示 找不到表单组件,加载不了。

也就是  Cannot read properties of undefined (reading 'setRules')  

打印 this.$refs.uForm 会出现 undefined,如下图所示

这个时候只需要写一个watch 监听 u-popup 加载速度即可 

watch:{
        // this.$refs.uForm.setRules(this.rules);
        show:{
            handler(value){
                this.$nextTick(()=>{ //在弹窗加载出来只有 show 才会变成 true
                    if( value == true ){ //判断 弹窗 v-model 变成 true 的时候去加载规则。 原理:在弹窗渲染完成之后表单渲染完成之前去加载规则就不会报错了
                        this.$refs.uForm.setRules(this.rules);
                    }
                })
            },
        },
        immediate: true, // 重点
        deep: true, // 重点
    },

2、在使用uniapp中需要修改data中的值,但是页面没有发生变化

原因:数据层次太多,没有触发render函数进行自动更新

解决方法:需手动调用,调用方式如下
this.$forceUpdate();

//需要修改的值
data() {
	return {
		data:{},
	};
},

//改代码如下:
this.data.a2 = "hello";
this.$forceUpdate();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值