在使用uniapp开发移动端APP时,有些时候实现某些功能不能操作dom实现起来特别麻烦,而uniapp也提供了一个库用于操作dom,即renderjs,目前只支持app-vue与web

  • 使用方式
    lang属性设置为renderjs即可,module设置模块名
<script module="test" lang="renderjs">
	export default {
		mounted() {
			// ...
		},
		methods: {
			// ...
		}
	}
</script>

具体操作

<template>
	<view class="box">
		<!-- prop可以自由命名,而change:name的name必须要与prop的命名一致; -->
		<!-- prop后面填写需要监听到内容,该内容必须要在service层定义; -->
		<!-- change:[name]后面填写当prop中的内容改变时需要触发的renderjs中的方法,使用renderjs模块名.方法名触发; -->
		<!-- 如果prop中的变量修改后的内容与原内容一样,不会触发renderjs -->
		<view 
			:prop="status" 
			:change:prop="TestRender.clearContent">
		</view>
		<!-- 触发service中的方法 -->
		<button @click="clearContentFun">触发clearContent方法</button>
		<!-- 直接触发renderjs中的方法:通过模块名.方法名触发 -->
		<button @click="TestRender.callMethod">触发renderjs中的callMethod方法</button>
		<view class="content"></view>
	</view>
</template>

<script>
	// 原本的script,也称为service层 
	export default {
		data() {
			return {
				status: false,
			};
		},
		mounted() {
			
		},
		methods: {
			recv(data){
				console.log("接受到renderjs的数据:", data)
			},
			clearContentFun() {
				this.status = !this.status;
			},

		},
	};
</script>
<!-- TestRender为模块名,页面中需要使用,命名自由 -->
<!-- renderjs中具有自己的作用域,不与service层冲突 -->
<script module="TestRender" lang="renderjs">
	export default {
		data() {
			return {
				content: "这里是renderjs"
			};
		},
		mounted() {
		
		},
		methods: {
			// service中修改内容触发该方法
			clearContent(){
				let content = document.querySelector(".content");
				content.innerHTML = this.content;
				console.log("status触发修改")
			},
			callMethod() {
				// 往service层发送信息callMethod(service中的方法名,数据)
				this.$ownerInstance.callMethod('recv', {
					content: "我是renderjs"
				})
			},
		}
	};
</script>
  • 使用renderjs时,好像只能从renderjs往service传递数据,而无法直接从service往renderjs传递数据;还有就是我在测试时在页面中使用两个触发变量(像prop一样的),然后报错了,但是我也没做深究,因为一个已经够用了,所以也不知道是不是只能定义一个。
  • 有一点要注意,就是改变触发变量的值是,不能与原来的一致,不然不会触发renderjs
  • 还有就是我在renderjs监听页面元素的focusblurinput事件时,renderjs会一直触发这些事件,直接把程序弄卡死
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐