91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue異步加載dom元素之后無法獲得如何解決

發布時間:2023-03-27 09:40:29 來源:億速云 閱讀:157 作者:iii 欄目:開發技術

這篇文章主要介紹“vue異步加載dom元素之后無法獲得如何解決”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“vue異步加載dom元素之后無法獲得如何解決”文章能幫助大家解決問題。

    vue異步加載dom元素后無法獲得

    vue存在大量的異步加載問題,比如動態創建dom元素,若你緊接著去獲取創建的dom元素是獲取不到的。

    解決辦法

    第一種辦法比較low,使用setTimeout方法,讓獲取dom的代碼在動態創建元素之后一段時間(這個時間非常的短)去執行。但這種方法應該是存在風險的,不推薦。

    第二種辦法 在將要執行的代碼上套一層 this.$nextTick()

    例如:

    this.$nextTick(function() {
            let grids = _that.$refs.datamessage;
            console.log(grids);
            for (let i = 0; i < grids.length; i++) {
              let xb = grids[i].getAttribute("index");
              //alert(xb);
              if (_that.value.indexOf(xb) != -1) {
                grids[i].setAttribute("ifSelect", "true");
                grids[i].style.backgroundColor = "#b3d8ff";
                grids[i].style.color = "#409eff";
              }
            }
          });

    vue穩健的獲取dom元素

    1、獲取Element的彈框中的Dom元素

    **由于彈框由v-if控制,在初始頁面渲染的時候,并不存在該Dom元素,所以在mounted中,獲取不到該彈框的Dom元素,無法添加原生時間,如下拉加載**

    下面提供穩健的獲取彈框Dom元素的方法,

    首先,由于彈框是由v-if判斷,則可以在watch中監聽v-if所對應的變量,在為true時,則彈框打開,此時去獲取DOM元素,發現仍然獲取不到。。。。

    此時,需要將獲取事件轉為異步執行,即寫在setTimeout中,即可。穩健一些,可以在nextTck中寫出。    

    (仍舊會存在問題)

    若在Element提供的彈框回調中(彈框打開動畫結束),則可以保證取到

    <el-dialog
          :visible.sync="dialogVisible"
          ref="dialog"
          @opened="dialogOpened"
        >
      dialogOpened() {
          this.$nextTick(() => {
            setTimeout(() => {
              let scrollContent = document.getElementById("scrollContent");
              if (scrollContent) {
                scrollContent.addEventListener("scroll", this.onScroll);
                console.log("獲取到滾動節點----");
              } else {
                console.log("未獲取到滾動節點====");
              }
            });
          });
        }

    2、如果以上方法均無法解決

    因為可能數據是異步獲取而后填入DOM中,則可以在更新函數中進行獲取DOM的操作,但此時,需要加很多限制,因為無法限制由誰引起的更新!需要標志位減少獲取次數。

    可以通過在watch監聽函數中,進行標志位的更改。

    有此想法的前提,是在給element UI 彈框中,嵌套了標簽頁 ,在每次切換標簽頁的過程中,DOM都會銷毀,所以對DOM獲取時機的把握比較關鍵,而根據標簽頁中的數據是否渲染完畢后,去獲取改DOM容器,可以說是相當穩健。

    無法獲取Element彈窗內嵌套的組件問題

    問題:當在el-dialog內嵌套組件時,若el-dialog沒有打開,則獲取不到其內部嵌套的內容,ref也不可以

    解決方法:在翻閱Element 隱藏滾動條部分的源碼時,發現其獲取dom元素的方法是通過computed來獲取

    經過驗證,可以在彈框打開的回調里面,利用計算屬性進行獲取

        <el-dialog ref="dialog"  @opened="dialogOpened">
            <div ref="innerContent"></div>
        </el-dialog>
    computed:{
        getInnerDom(){
            //此時之只能獲取到dialog
            console.log(this.$refs)
            return this.$refs.innerContent
        }
    }
    methods:{
        dialogOpened(){
            //此時可以獲取到內容節點
            console.log(this.getInnerDom)
        }
    }

    關于“vue異步加載dom元素之后無法獲得如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    泗水县| 聂拉木县| 阿拉善左旗| 老河口市| 辽宁省| 比如县| 宝应县| 兖州市| 杭州市| 淮南市| 彭泽县| 长葛市| 芦溪县| 闸北区| 吴桥县| 九龙城区| 保定市| 繁昌县| 诸暨市| 开化县| 山西省| 师宗县| 延津县| 安泽县| 自贡市| 安吉县| 宾川县| 乌审旗| 石门县| 巧家县| 鄂尔多斯市| 福建省| 资兴市| 宜川县| 迁西县| 应城市| 灵川县| 阜康市| 沿河| 互助| 重庆市|