欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

對于UNI APP端的開發(fā)而言,由于上并沒有document,不能進行相關(guān)的DOM操作,同時有關(guān)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ù)

使用方式

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

script的module的名稱可以隨便取,module=(值任意,相當于命名空間,之后會根據(jù)這個名字調(diào)用其中的方法),但是change:參數(shù)名稱必須和module保持一致,雖然不會阻斷renderjs的運行,但是會報錯,也會導(dǎo)致無法捕獲數(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負責(zé)數(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 相關(guān)接口(如:uni.request)
  • H5 端邏輯層和視圖層實際運行在同一個環(huán)境中,相當于使用 mixin 方式,可以直接訪問邏輯層數(shù)據(jù)。

總結(jié)

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

您可能感興趣的文章:

相關(guān)文章

  • 2007/12/23更新創(chuàng)意無限,簡單實用(javascript log)

    2007/12/23更新創(chuàng)意無限,簡單實用(javascript log)

    在javascript開發(fā)過程中,如果總是使用alert的方式調(diào)試程序,在某些簡單的程序中是可行的. 但是在通常的項目很復(fù)雜,這種方式已經(jīng)很難滿足,企業(yè)級開發(fā)的需要。
    2007-12-12
  • JavaScript 懸浮窗口實現(xiàn)代碼

    JavaScript 懸浮窗口實現(xiàn)代碼

    主要是window.onscroll的運用
    2009-02-02
  • 微信小程序?qū)崿F(xiàn)分頁功能

    微信小程序?qū)崿F(xiàn)分頁功能

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)分頁功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • JavaScript連接組件實現(xiàn)打印功能

    JavaScript連接組件實現(xiàn)打印功能

    這篇文章主要為大家詳細介紹了JavaScript如何連接連接抖音打印組件實現(xiàn)打印小票功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2024-04-04
  • 微信開發(fā)之微信jssdk錄音功能開發(fā)示例

    微信開發(fā)之微信jssdk錄音功能開發(fā)示例

    這篇文章主要介紹了微信開發(fā)之微信jssdk錄音功能開發(fā)示例,在微信瀏覽器內(nèi)打開的頁面,制作一個按鈕,用戶按住按鈕后開始錄音,松手后停止錄音,感興趣的小伙伴們可以參考一下
    2018-10-10
  • javascript在線編碼查詢工具

    javascript在線編碼查詢工具

    在線編碼查詢工具,編碼查詢,HTML編碼
    2010-10-10
  • JavaScript中push(),join() 函數(shù) 實例詳解

    JavaScript中push(),join() 函數(shù) 實例詳解

    本文通過實例給大家介紹了JavaScript中push(),join() 的知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • 一篇文章搞定JavaScript類型轉(zhuǎn)換(面試常見)

    一篇文章搞定JavaScript類型轉(zhuǎn)換(面試常見)

    這篇文章主要介紹了一篇文章搞定JavaScript類型轉(zhuǎn)換(面試常見),非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-01-01
  • 最新評論