android 自定义组件 传参,vue自定义组件父子传参时小程序出现的问题

------------------ 原始邮件 ------------------

发件人: "yjj5855"

发送时间: 2019年11月21日(星期四) 晚上7:54

收件人: "dcloudio/uni-app"

抄送: "Yiusing"<376126723@qq.com>;"Author"

主题: Re: [dcloudio/uni-app] vue自定义组件父子传参时小程序出现的问题 (#524)

微信小程序中

在uni-mp-weixin/dist/index.js的function parseBaseComponent

properties:initProperties(vueOptions.props,false,vueOptions.__file) 中调用了createObserver方法 function createObserver (name) { return function observer (newVal, oldVal) { if (name === 'rules') { console.error(newVal, oldVal) // 输出得到 } if (this.$vm) { this.$vm[name] = newVal; // 为了触发其他非 render watcher } } }

输出了2次数据变化

第一次是从初始默认状态 转变为 父组件data赋值给子组件prop,没有问题,有validator属性

第二次validator属性消失,经过错误报告发现是 this.$vm.$mount();挂载之后触发了变化

在差量更新的方法中用了JSON.parse(JSON.stringify(ret)),所以导致validator属性消失

function cloneWithData(vm) { // 确保当前 vm 所有数据被同步 var ret = Object.create(null); var dataKeys = [].concat( Object.keys(vm._data || {}), Object.keys(vm._computedWatchers || {})); dataKeys.reduce(function(ret, key) { ret[key] = vm[key]; return ret }, ret); //TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据 Object.assign(ret, vm.$mp.data || {}); if ( Array.isArray(vm.$options.behaviors) && vm.$options.behaviors.indexOf('uni://form-field') !== -1 ) { //form-field ret['name'] = vm.name; ret['value'] = vm.value; } return JSON.parse(JSON.stringify(ret)) // 不能被解析的属性都会丢失 }

错误文件在

You are receiving this because you authored the thread.

Reply to this email directly, view it on GitHub, or unsubscribe.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,父组件向子组件传递参数有多种方式。其中一种方式是通过props属性来传递参数。在父组件中,可以在子组件的标签上使用冒号加上要传递的属性名来绑定一个值,这个值可以是父组件中的数据或者是一个方法。在子组件中,可以通过props来接收父组件传递过来的参数。 如果要实现子组件向父组件传递参数,可以使用$emit方法。在子组件中,可以通过在方法中调用$emit方法来触发一个自定义事件,并将要传递的参数作为第二个参数传入。在父组件中,可以在子组件的标签上使用@符号来监听这个自定义事件,并在相应的方法中接收子组件传递过来的参数。 综上所述,通过props属性和$emit方法,可以实现Vue父子组件之间的参数传递。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue父子组件传参的4种方式](https://blog.csdn.net/glorydx/article/details/112247747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue3父子组件传参(setup语法糖写法)](https://blog.csdn.net/skyblue_afan/article/details/126667586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值