1***@163.com
1***@163.com
  • 发布:2022-01-30 10:27
  • 更新:2024-08-02 17:37
  • 阅读:3042

【报Bug】renderjs在app端,无法通过this获取prop和data的值

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 12.2

HBuilderX类型: 正式

HBuilderX版本号: 3.3.10

手机系统: 全部

手机厂商: 苹果

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

ios模拟器,华为nova7,锤子坚果3

示例代码:
<template>  
    <view class="content">  
        <view id="echarts" :option="option" :oid="id" :change:oid="echarts.changeid" :change:option="echarts.changeData" class="echarts"></view>  
    </view>  
</template>  

<script>  
    export default {  
        props: {  
            id: { type: String, default: '123' },  
        },  
        data() {  
            return {  
                option:[]  
            }  
         },  
         mounted(){  
             setTimeout(()=>{  
                 this.option.push(1);  
             },1000)  
         },    
         methods:{  
             sayHello(a){  
                 uni.showToast({  
                    title:`点击了${a}`  
                 })  
             }  
         }  
    }  
</script>  

<script module="echarts" lang="renderjs">  
    let instance = null;  
    export default {  
        mounted() {  
            setTimeout(()=>{  
                console.log('props:', this.id, 'data:', this.option)  
            },1000)  

         window.onClickTest = (a)=>{  
             console.log(this.$ownerInstance)  
             instance.callMethod('sayHello',a)  
         }  
         let echarts = document.getElementById("echarts");  
         echarts.innerHTML = `<button type="button" onclick="onClickTest(45)">点我试一试</button>`  
        },  
        methods: {  
            changeData(v,old,oi){  
                console.log('v,old,oi: ', v,old,oi, oi)  
                if(!instance){  
                    instance = oi  
                }  
            },  

            changeid(data, old, i){  
                console.log('vm, old, i: ', data, old, i)  

            }  
        }  
    }  
</script>

操作步骤:

运行后,控制台无法打印出 this.id, this.option

预期结果:

同H5的实现一样,可以直接通过this 直接拿到prop 和 data的数据

实际结果:

[LOG] : props:, undefined, data:, undefined at pages/index/index.vue:37

bug描述:

renderjs在app端,无法通过this获取prop和data的值

在H5上是可以的

目前,只能通过监听prop及data的change,在renderjs里获取对应的值

另外使用setup语法糖也会报错

2022-01-30 10:27 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

非Bug,renderjs本身就是受限的且隔离的,跟script不是直接互通的,只能通过规范的change和callMethod互通

  • 1***@qq.com

    那怎么改呢,callMethod将数据传到外部,change是什么,例子有吗

    2023-01-12 10:56

1***@qq.com

1***@qq.com

通过change 可以输出 接受的数据到 控制台,但是无法访问具体的属性值,newValue.xxx 的结果是undefined,但是输出newValue 可以看到全部值,newValue是一个对象值

  • YUANRJ

    请提供下测试工程和具体版本信息。

    2023-03-03 14:20

4***@qq.com

4***@qq.com - zry

updateEcharts(newValue, oldValue, ownerInstance, instance) {
console.log('newValue:', newValue);
console.log('this',ownerInstance.$vm('天'))
newValue.tooltip.formatter = function(params) {
console.log(params)
let str =this.base.todate(params[0].axisValueLabel) + '</br>';
params.forEach((item, idx) => {
str += ${item.marker}${item.seriesName}: ${item.data[1]}
switch (idx) {
case 0:
str += newValue.tooltip.text;
break;
case 1:
str += 'kg';
break;
case 2:
str += '%';
break;
case 3:
str += '%';
break;
case 4:
str += 'mg/l';
break;
case 5:
str += '(1000/ml)';
break;
}
str += idx === params.length - 1 ? '' : '</br>'
})
return str
}
//监听 service 层数据变更
myChart.setOption(newValue, true);
myChart.resize();
},
我现在就遇见一个这样的情况,我想使用this.xxx的方式访问组件方法,但是在app端获取不到,有解决办法吗?

要回复问题请先登录注册