当前位置: 首页 > news >正文

uni-app中使用RenderJs 使用原生js

RenderJs运行的层叫【视图层】,Uniapp原生Script叫【逻辑层】,逻辑层要调用视图层需要使用一个叫【watcher】,具体怎么调用呢

为了实现这两层之间的通信,uniapp提供了一些特定的机制。以下是对这些通信机制的详细解释,以及一个具体的示例,说明逻辑层如何调用视图层的watcher。

通信机制
‌通过this.$ownerInstance获取当前组件的ComponentDescriptor实例‌:

在RenderJs中,你可以通过this.$ownerInstance访问到当前组件的ComponentDescriptor实例。这个实例提供了与逻辑层通信的接口。
‌通过事件和callMethod方法进行通信‌:

逻辑层可以触发事件,并在RenderJs中监听这些事件。
RenderJs也可以通过this.$ownerInstance.callMethod方法调用逻辑层中的方法,并传递数据。

举例:

<template><view><!-- 视图层组件,绑定:prop和:change:prop --><view :prop="someData" :change:prop="renderScript.onDataChange"></view><button @click="changeData">改变数据并触发watcher</button></view>
</template><script>
export default {data() {return {someData: '初始数据', // 逻辑层数据};},methods: {changeData() {this.someData = '新数据'; // 改变数据,这将触发视图层的watcher},// 逻辑层接收来自视图层的数据(可选)receiveDataFromRenderJs(data) {console.log('从视图层接收到的数据:', data);},},
};
</script><script module="renderScript" lang="renderjs">
export default {data() {return {receivedData: '', // 用于存储从逻辑层接收到的数据};},methods: {onDataChange(newValue, oldValue, ownerVm, vm) {console.log('数据变化了,新值:', newValue, '旧值:', oldValue);// 可以在这里调用逻辑层的方法,并传递数据// ownerVm.callMethod('receiveDataFromRenderJs', { someKey: newValue });},// 视图层向逻辑层发送数据(示例)sendDataToLogicLayer() {// 假设这里有一些逻辑需要向逻辑层发送数据const dataToSend = { fromRenderJs: '这是视图层的数据' };this.$ownerInstance.callMethod('receiveDataFromRenderJs', dataToSend);},},
};
</script>

解释
‌模板部分‌:

我们定义了一个视图层组件,并使用:prop和:change:prop绑定了逻辑层的数据和视图层的watcher方法。
当someData在逻辑层发生变化时,将触发renderScript.onDataChange方法。
‌逻辑层部分‌:

我们定义了一个someData数据和一个changeData方法,用于改变someData的值。
当someData的值改变时,将触发视图层的onDataChangewatcher方法。
我们还定义了一个receiveDataFromRenderJs方法,用于接收来自视图层的数据(虽然在这个示例中并没有直接调用它,但展示了如何接收数据)。
‌视图层(RenderJs)部分‌:

我们定义了一个onDataChange方法,当逻辑层的数据变化时,这个方法将被调用。
在onDataChange方法中,我们可以访问新旧值,并可以在这里调用逻辑层的方法,传递数据。
我们还定义了一个sendDataToLogicLayer方法,用于演示如何从视图层向逻辑层发送数据。
通过这种方式,你可以在uniapp中实现逻辑层和视图层之间的有效通信

http://www.xdnf.cn/news/204481.html

相关文章:

  • 抱佛脚之学SSMSpringMVC数据绑定
  • 微服务学习笔记
  • 时序数据库 TDengine × Perspective:你需要的可视化“加速器”
  • OpenGL ES 3.0 第二章总结:你好,三角形(Hello Triangle)
  • AlDente Pro for Mac电脑 充电限制保护工具 安装教程【简单,轻松上手】
  • 您好,当前系统不允许绑定该店,具体原因您可咨询系统服务商,我们将尽力为您解决
  • DevExpressWinForms-TreeList-设置不可编辑
  • 大数据学习(115)-hive与impala
  • JAVA-使用Apache POI导出数据到Excel,并把每条数据的图片打包成zip附件项
  • 排序算法详解笔记(二)
  • AI大模型:(二)1.4 Qwen2.5-Omni全模态大模型部署
  • 数据结构入门:详解顺序表的实现与操作
  • 前端——CSS1
  • C#里嵌入lua脚本的例子
  • 【3D基础】顶点法线与平面法线在光照与PBR中的区别与影响
  • 基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表
  • k8s集群环境部署业务系统
  • leetcode 2516. 每种字符至少取 K 个
  • 【网络原理】从零开始深入理解HTTP的报文格式(一)
  • 人工智能数学基础(三):微积分初步
  • 基于tabula对pdf中的excel进行识别并转换成word(三)
  • UE调试相关
  • AI遇见端动态神经网络:Cephalon(联邦学习+多模态编码)认知框架构建
  • 基于SpringAI实现简易聊天对话
  • 学习记录:DAY20
  • 人工智能数学基础(四):线性代数
  • Vue3调度器错误解析,完美解决Unhandled error during execution of scheduler flush.
  • 【C#】.net core6.0无法访问到控制器方法,直接404。由于自己的不仔细,出现个低级错误,这让DeepSeek看出来了,是什么错误呢,来瞧瞧
  • 51c自动驾驶~合集37
  • 【资料分享】全志T536(异构多核ARMCortex-A55+玄铁E907 RISC-V)工业核心板硬件说明书