uniapp移动端如何操作dom
/ 往service层发送信息callMethod(service中的方法名,数据)// 原本的script,也称为service层。// service中修改内容触发该方法。"接受到renderjs的数据:""这里是renderjs""status触发修改""我是renderjs"
·
在使用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监听页面元素的
focus
、blur
、input
事件时,renderjs会一直触发这些事件,直接把程序弄卡死
更多推荐
已为社区贡献2条内容
所有评论(0)