最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

uni-app中renderjs使用的方式淺析

 更新時間:2022年09月23日 09:18:48   作者:study夏羽  
renderjs是一個運行在視圖層的js,它只支持app-vue和h5,下面這篇文章主要給大家介紹了關于uni-app中renderjs使用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

對于UNI APP端的開發(fā)而言,由于上并沒有document,不能進行相關的DOM操作,同時有關DOM渲染的第三方庫(echart、openlayer等)也無法有效的使用,因此官方推出了renderjs方案,來解決上述問題。

renderjs是一個運行在視圖層的js

renderjs的主要作用有2個:

大幅降低邏輯層和視圖層的通訊損耗,提供高性能視圖交互能力

在視圖層操作dom,運行for web的js庫

renderjs和service層的通信

具體分為三部分:

1.在template中通過用戶手動操作觸發(fā)事件

2.在service層中調(diào)用方法

3.在renderjs中調(diào)用方法

從renderjs到service層:通過this.$ownerInstance.callMethod()方法可以調(diào)用service中的方法,第一個參數(shù)是方法名,第二個參數(shù)是傳過去的參數(shù)

使用方式

設置 script 節(jié)點的 lang 為 renderjs

script的module的名稱可以隨便取,module=(值任意,相當于命名空間,之后會根據(jù)這個名字調(diào)用其中的方法),但是change:參數(shù)名稱必須和module保持一致,雖然不會阻斷renderjs的運行,但是會報錯,也會導致無法捕獲數(shù)據(jù)的變化

<script module="test" lang="renderjs">
	export default {
		mounted() {
			// ...
		},
		methods: {
			// ...
		}
	}
</script>
<template>
	<view>
		<!--  prop是個名字,可以隨意改,注意:change:[name]這兩個名字需要相同就行了  -->
		<!-- 從service層到renderjs:首先在template中綁定一個service中定義的值,然后在同樣的位置增加:change:(屬性名)=(renderjs的module名.觸發(fā)的方法)來實現(xiàn)通信。
簡單來說就是service負責數(shù)據(jù)的更改,通過template監(jiān)聽數(shù)據(jù)的變化來通知renderjs 
			this.$ownerInstance.callMethod方法必須通過點擊事件執(zhí)行-->

	<!-- msg是要向renderjs發(fā)送的數(shù)據(jù),testRenderjs 為renderjs模塊名稱,onChange是renderjs中的監(jiān)聽方法 -->
		<view :prop="msg" :change:prop="testRenderjs.onChange" id="renderjs-view">{{msg}}</view>

		<button @tap="changeMsgFn">點擊修改options</button>

		<button @tap="testRenderjs.emitData">直接調(diào)用renderjs中的emitData方法</button>
	</view>
</template>
<script>
	// 原先的script,這里被稱為service層 
	export default {
		data() {
			return {
				// 這里存放準備傳遞給renderjs的數(shù)據(jù)  
				msg: "我是service層原來的msg"
			}
		},
		methods: {
			// 觸發(fā)service層 出入renderjs數(shù)據(jù)改變
			changeMsgFn() {
				//  修改msg 觸發(fā)change
				this.msg = "msg的值變了"
			},
			// 接收renderjs發(fā)回的數(shù)據(jù)
			acceptDataFromRenderjs(data) {
				console.log('從renderjs中接收到的數(shù)據(jù)', data)
				this.msg = data.content
			}
		}
	}
</script>
<!--  testRenderjs 為renderjs模塊名稱,lang固定寫法 -->
<script module="testRenderjs" lang="renderjs">
	export default {
		data() {
			return {
				content:"我是來自renderjs的數(shù)據(jù)"
			}
		},
		created() {
			console.log('renderjs初始化完畢')
		},
		mounted() {
			const view = document.getElementById('renderjs-view')
			const button = document.createElement('button')
			button.innerText = '一個按鈕'
			view.appendChild(button)
		},
		methods: {
			// 接收邏輯層service層發(fā)送的數(shù)據(jù)
			onChange(newValue, oldValue, ownerInstance, instance) {
				console.log('service層中的options發(fā)生變化')
				console.log('新值newValue', newValue)
				console.log('舊值oldValue', oldValue)
				// ownerInstance和this.$ownerInstance一樣,可用來向service層通信     
				// instance和ownerInstance的區(qū)別是:       
				// instance.$el指向的是觸發(fā)事件的那個節(jié)點;ownerInstance.$el指向當前vue文件中的根節(jié)點;    
				// instance的作用目前尚不明確,官方?jīng)]有給出用法   
			},
			// 發(fā)送數(shù)據(jù)到service層
			emitData(event, ownerInstance) {
				// event是事件對象
				
				ownerInstance.callMethod('acceptDataFromRenderjs', {
					content: this.content
				})
				// 或者
				/* this.$ownerInstance.callMethod('acceptDataFromRenderjs',{
					content:this.content
				}) */
				// 需要注意的是:只有通過在template中用戶手動操作觸發(fā)renderjs的方法參數(shù)是這兩個:event, ownerInstance;通過其他方法觸發(fā)的函數(shù)參數(shù)不一樣
			}
			
		}
	}
</script>

uni-app官網(wǎng)文檔

補充:使用時的注意事項

  • 目前僅支持內(nèi)聯(lián)使用。
  • 不要直接引用大型類庫,推薦通過動態(tài)創(chuàng)建 script 方式引用。
  • 可以使用 vue 組件的生命周期不可以使用 App、Page 的生命周期
  • 視圖層和邏輯層通訊方式與 WXS 一致,另外可以通過 this.$ownerInstance 獲取當前組件的 ComponentDescriptor 實例。
  • 觀測更新的數(shù)據(jù)在視圖層可以直接訪問到。
  • APP 端視圖層的頁面引用資源的路徑相對于根目錄計算,例如:./static/test.js。
  • APP 端可以使用 dom、bom API,不可直接訪問邏輯層數(shù)據(jù),不可以使用 uni 相關接口(如:uni.request)
  • H5 端邏輯層和視圖層實際運行在同一個環(huán)境中,相當于使用 mixin 方式,可以直接訪問邏輯層數(shù)據(jù)。

總結(jié)

到此這篇關于uni-app中renderjs使用方式的文章就介紹到這了,更多相關uni-app中renderjs使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

最新評論

五台县| 和硕县| 泸水县| 平阳县| 新兴县| 永平县| 济南市| 靖宇县| 雅江县| 辉南县| 祁连县| 西和县| 佳木斯市| 河北区| 乌苏市| 阳春市| 南京市| 高唐县| 卓尼县| 安远县| 合江县| 微博| 古丈县| 乌兰县| 厦门市| 枣阳市| 陕西省| 安义县| 沾益县| 利川市| 和平县| 蓝山县| 都匀市| 永胜县| 宝鸡市| 富民县| 体育| 砀山县| 绥化市| 赤峰市| 都兰县|