uniapp 使用renderjs

1. uniapp 獲取dom元素的寬高

在uniapp 中由于他禁止操作dom,所以不能直接獲取dom元素,框架本身提供了獲取元素寬高的方法

let obj = uni.createSelectorQuery().select('xx') // xx為class或者id,如 .block, #block

obj.boundingClientRect(function (data) { // data - dom中的參數(shù),寬高等
      console.log(data)
}).exec()
2. renderjs 獲取dom元素

注:只支持 H5 和 App,官網(wǎng)詳見 https://uniapp.dcloud.io/frame?id=renderjs

1. 注意事項(xiàng)
  • 目前僅支持內(nèi)聯(lián)使用。
  • 不要直接引用大型類庫,推薦通過動(dòng)態(tài)創(chuàng)建 script 方式引用。
  • 可以使用 vue 組件的生命周期不可以使用 App、Page 的生命周期
  • 視圖層和邏輯層通訊方式與 WXS 一致,另外可以通過 this.$ownerInstance 獲取當(dāng)前組件的 ComponentDescriptor 實(shí)例。
  • 觀測(cè)更新的數(shù)據(jù)在視圖層可以直接訪問到。
  • APP 端視圖層的頁面引用資源的路徑相對(duì)于根目錄計(jì)算,例如:./static/test.js。
  • APP 端可以使用 dom、bom API,不可直接訪問邏輯層數(shù)據(jù),不可以使用 uni 相關(guān)接口(如:uni.request)
  • H5 端邏輯層和視圖層實(shí)際運(yùn)行在同一個(gè)環(huán)境中,相當(dāng)于使用 mixin 方式,可以直接訪問邏輯層數(shù)據(jù)。
2. 基本用法
// test 為renderjs模塊名稱,lang固定寫法
<script module="test" lang="renderjs">
    export default {
      // 與uni寫法一致
    }
</script>
3. 案例分析
  1. 在renderjs的script中,是無法獲取到uni中script--data中的數(shù)據(jù)的,所以要通過一定的方式去傳輸
  2. 在renderjs中,調(diào)用方法時(shí)也可以通過this.$ownerInstance.callMethod('函數(shù)名', 數(shù)據(jù))向uni的script發(fā)送
<template>
    <view class="demo">
        <!-- info隨便寫,但是要與chang后面的一致,text是renderjsmodule名稱 -->
        <!--data是要想renderjs發(fā)送的數(shù)據(jù),updateData是renderjs中的監(jiān)聽方法 -->
        <view  :info="data" :change:info="text.updateData"  ref="video"></view>
        </view>
</template>
<!-- 普通的script標(biāo)簽 -->
<script>
    export default {
       data(){
            return {
              data: "hello"
            }
        },
        methods:{
              sendMsg(msg) {
                  console.log(msg) // 不好
              }
        }
    }
</script>
<!-- renderjs的script標(biāo)簽 -->
<script module="text" lang="renderjs">
    export default {
           data(){
                return {
                }
            },
            methods:{
              onClick(event, ownerInstance) {
                // 向 uni 的script發(fā)送信息
                this.$ownerInstance.callMethod('sendMsg', '不好')
              },
              updateData(newValue, oldValue, ownerInstance, instance) {
                  // newValue: 新數(shù)據(jù)
                  // oldValue: 老數(shù)據(jù)
              },
          }
    }
</script>

注: 由于renderjs與uni的script運(yùn)行在同一環(huán)境,不能保證加載順序,所以,盡量把操作dom部分放在renderjs中,所有數(shù)據(jù)通過數(shù)據(jù)傳遞后,在renderjs中操作

在renderjs中,可能會(huì)有獲取不到數(shù)據(jù)的情況,請(qǐng)確保組件數(shù)據(jù)優(yōu)先與renderjs加載,確定所傳輸?shù)臄?shù)據(jù)有值

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)導(dǎo)覽 uniapp調(diào)研資料 1.認(rèn)識(shí)vue 2.搭建vue應(yīng)用 3.組件與api 4.生命周期 5.條件編譯 ...
    Man不經(jīng)心閱讀 17,720評(píng)論 1 6
  • 組件是視圖層的基本組成單元。 組件是一個(gè)單獨(dú)且可復(fù)用的功能模塊的封裝。 一個(gè)組件包括開始標(biāo)簽和結(jié)束標(biāo)簽,標(biāo)簽上可以...
    鄒鄒_ZZ閱讀 646評(píng)論 0 0
  • uni-app的基本使用 課程介紹: 基礎(chǔ)部分: 環(huán)境搭建 頁面外觀配置 數(shù)據(jù)綁定 uni-app的生命周期 組件...
    綠茵場(chǎng)上的碼者閱讀 47,090評(píng)論 1 21
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,826評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,469評(píng)論 1 3

友情鏈接更多精彩內(nèi)容