uniapp中renderjs使用与传值问题

目录
  • 前言
  • 一、renderjs的作用是什么?
  • 二、renderjs怎样使用?
  • 三、测试代码(借用网上一段代码,写的很全面)
  • 补充:uniapp 中renderjs传值问题
  • 总结

前言

需求是用openlayers在uniapp框架下做一个移动gis类的软件,选择用renderjs实现地图与dom的交互,一开始也是小白,通过百度资料以及一步步测试后掌握了renderjs的使用,以及地图功能的实现。

一、renderjs的作用是什么?

renderjs 主要服务于APP,因为uni-app为vue+js+html进行编写,整个是h5的技术栈。而app上并没有document等基础对象。那么,涉及到这些的前端类库就无法使用,例如html2、canvas、canvas2、image。而要用这些怎么办,这是用就出现了renderjs这种视图层工具来进行渲染。

运行在视图层的js

大幅降低逻辑层和视图层的通讯损耗,提供高性能视图交互能力(减少通讯损耗提升性能,例如一些手势或canvas动画的场景)

在视图层操作dom,运行for web的js库(可以操作dom,意味着拥有window、document等这些全局变量,在app-vue的service层没有这些)

二、renderjs怎样使用?

1.原生层数据通过监听传入renderjs层(可以通过调用原生层的方法触发)

2.直接调用renderjs层方法传出数据

三、测试代码(借用网上一段代码,写的很全面)

<template>
  <view>
        <view  :msg="msg" :change:msg="renderScript.receiveMsg" class="renderjs" id="renderjs-view">
			{{msg}}
		</view>
        <button @click="renderScript.emitData">直接调用renderjs中的emitData的方法</button>
		<button @click="changeMsg" class="app-view">改变msg的值,直接调用renderjs中receiveMsg的值</button>
		<button @click="renderScript.renferMsg">通过renderjs改变msg的值,同时调用renderjs中的emitData的方法</button>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        msg: '我是service层原来的msg',
      };
    },
    methods: {
      // 触发逻辑层出入renderjs数据改变
      changeMsg() {
        this.msg = "msg值改变了";
      },
      // 接收renderjs发回的数据
      receiveRenderData(val) {
        console.log('renderjs返回的值-->', val);
      },
	  //接收renderjs发回的数据,同时触发:change:msg,调用enderjs中的emitData的方法
	  serviceClick(e){
		  this.msg=e
	  }
    }
  };
</script>

<script module="renderScript" lang="renderjs">
    export default {
      data() {
        return {
          name: '我是renderjs数据'
        }
      },
      methods: {
		  renferMsg(event, ownerInstance) {
		  	// 调用 service层的serviceClick方法,传值
			console.log(event,ownerInstance)
		  	ownerInstance.callMethod('serviceClick', {
		  		test: '这是点击renderjs的区域,向service层传递变量'
		  	})
		  },
        // 接收逻辑层发送的数据
        receiveMsg(newValue, oldValue, ownerVm, vm) {
          console.log('msg变化了newValue', newValue)
          console.log('msg变化了oldValue', oldValue)
          console.log('msg变化了ownerVm', ownerVm)
          console.log('msg变化了vm', vm)
        },
        // 发送数据到逻辑层
        emitData(e, ownerVm) {
          ownerVm.callMethod('receiveRenderData', this.name)
        }
      }
    };
</script>

注意:1.在renderjs层不能使用uni或其他框架的API,例如uni.request、uni.getlocation等等方法,需在原生层调用后触发监听将数据传入。

2.在APP端renderjs层的data与原生层的data互不相干

3.this.$ownerInstance.callMethod方法必须通过点击事件执行

4.地图方法都要写在renderjs层中,不能使用子组件

补充:uniapp 中renderjs传值问题

需要自己自定义一个按钮,点击按钮后才能获取到值。renderjs 代码页面

<template>
    <view class="map-wrap">
        <view id="map-box">

        </view>
        <view  @click="mapbox.emitData" style="position: absolute; bottom: 50px;left: 25%; z-index: 999;display: none;">
                            确认
        </view>
    </view>
</template>

//renderjs 模式
<script>
    export default {
        data() {
            return {
                msg: '',
            };
        },
        methods: {
            // 触发逻辑层出入renderjs数据改变
            // 接收renderjs发回的数据
            receiveRenderData(val) {
                console.log(val)
                this.$eventHub.$emit('dot', val);
                uni.navigateBack({
                    delta: 1
                })
            }
        }
    };
</script>
<script module="mapbox" lang="renderjs">
    export default {
        data: {
            return () {
                dot: 123
            }
        },
        methods: {
              //点击函数
            emitData(e, ownerVm) {
                ownerVm.callMethod('receiveRenderData', this.dot)
            }
        }
    }
</script>

主页面代码,在onload里面接收renderjs页面的值

        onLoad() {
            var t = this;
            this.$eventHub.$on('dot', data => {
                 console.log(data);
                //将数组转为字符串
                //t.dot = t.getString(data)
                //字符串转数组
                //console.log(eval(t.dot))
            });
        },

总结

到此这篇关于uniapp中renderjs使用与传值问题的文章就介绍到这了,更多相关uniapp renderjs使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • UNiAPP中如何使用render.js绘制高德地图

    目录 什么是render.js 使用方式 在uniAPP中使用render.js 绘制高德地图 明确需求 解决思路 编写代码 vue页面使用render.js 初始化地图 实现效果 render.js中的通信 1.数据的绑定 2.数据的接收 3.render.js中向vue页面发送数据 总结 什么是render.js renderjs是一个运行在视图层的js.它比WXS更加强大.它只支持app-vue和h5. renderjs的主要作用有2个: 大幅降低逻辑层和视图层的通讯损耗,提供高性能视图交

  • uniapp中renderjs使用与传值问题

    目录 前言 一.renderjs的作用是什么? 二.renderjs怎样使用? 三.测试代码(借用网上一段代码,写的很全面) 补充:uniapp 中renderjs传值问题 总结 前言 需求是用openlayers在uniapp框架下做一个移动gis类的软件,选择用renderjs实现地图与dom的交互,一开始也是小白,通过百度资料以及一步步测试后掌握了renderjs的使用,以及地图功能的实现. 一.renderjs的作用是什么? renderjs 主要服务于APP,因为uni-app为vue

  • 解决java main函数中的args数组传值问题

    这几天面试中有遇到关于main数组中的args数组传值的问题,一般是从命令提示符中传值,也可以直接在java代码中赋值. 而且这个数组的长度是动态的,根据传值的个数确定数组的长度. 1.从命令提示符中传值 我在桌面新建了一个文本文档重命名为TestMain.java,代码如下 public class TestMain { public static void main(String[] args) { System.out.println("hello "+args[0]); Sys

  • 详解uni-app中的样式

    目录 uni-app中的样式 总结 uni-app中的样式 sass插件需要在官网下载,按提示操作即可 rpx 即响应式px,一种根据屏幕宽度自适应的动态单位.以750宽的屏幕为基准,750rpx恰好为屏幕宽度.屏幕变宽,rpx 实际显示效果会等比放大. 使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束 定义在 App.vue 中的样式为全局样式,作用于每一个页面.在 pages 目录下 的 vue 文件中定义的样式为局部样式,只作用在

  • 在uni-app中使用element-ui的方法与报错解决

    uni-app的相关UI组件库中可能会没有你想要的功能组件,自己去开发的话需要花很多时间,此时咱们可以将别的UI组件库给安装到uni-app中来,达到直接使用该UI组件库的功能组件,例如,安装element-ui uni-app使用element-ui需安装以下插件 npm i element-ui -S 按需引入组件需要装以下插件 npm install babel-plugin-component -D 当你安装完以上插件后,需要在main.js中进行引入,例如引入全部: import Vu

  • uniapp中的picker选择器的几种使用场景

    目录 一.普通选择器 二.多列选择器 三.时间选择器 四.日期选择器 一.普通选择器 <template> <view> <picker @change="bindPickerChange" :value="index" :range="array" range-key="name"> <view style="padding: 20rpx;background-color:

  • uni-app中弹窗的使用与自定义弹窗

    目录 一.uni-app中自带的弹窗 二.实例 1.uni.showToast(OBJECT)(消息提示框) 2.uni.showModal(OBJECT)(显示两个按钮的提示框) 3.uni.showActionSheet(OBJECT)(从底部向上弹出操作菜单) 补充:uniapp自定义弹窗 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一.uni-app中自带的弹窗 示例:在前端开发中,为了优化用户的交互体验,常需要用到弹窗来进行提示,引导用户操作,而js里的alter用起来是真的

  • uniapp中微信小程序与H5相互跳转以及传参详解(webview)

    目录 技术栈: 前言: 一.小程序向H5传递 1.小程序端发送数据 2.pages.json进行设置 3.H5端进行数据接收 4.调试方式以及数据查看 二.H5向小程序传递 1.引入需要的模块 2.更改文件内容 3.H5端发送数据 4.小程序端进行数据接收 5.调试方式以及数据查看 三.参考链接地址 总结 技术栈: uniapp-H5+uniapp-微信小程序(vue3+vite2+ts) 前言: 在单位做项目的时候碰到一个需求,需要从微信小程序跳转到H5页面,这两个端都是使用uniapp编写的

  • uniapp中vuex的应用使用步骤

    目录 一.vuex是什么? 二.使用步骤 1.引入 2.state属性,主要功能为存储数据 3. Getter属性,主要功能为计算筛选数据 4. Mutation属性,Vuex中store数据改变的唯一地方(数据必须同步) 5. Action属性: 6. Module结构. 总结 一.vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 按照自己理解来说就是公共数据管理模块.

  • uniapp中常用的几种提示弹框

    目录 一.成功提示弹框 二.加载提示弹框 三.确认取消提示框 四.列表选择提示弹框 五.自定义图标 总结 一.成功提示弹框 在执行增.删.改.查等提交成功后弹出提示. uni.showToast({ title: '成功提示', //将值设置为 success 或者直接不用写icon这个参数 icon: 'success', //显示持续时间为 2秒 duration: 2000 }) 效果如下: 若icon参数值设置为none,将不显示“√”图标,只显示文字提示. uni.showToast(

随机推荐