------------------ 原始邮件 ------------------
发件人: "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.