日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue中原生template標簽失效如何解決

瀏覽:252日期:2022-06-01 16:34:46
目錄
  • 前言
  • 一、事件未綁定的原因
  • 二、如何處理原生template標簽

前言

需要原生Javascript + three.js的數據標注平臺加入Vue框架.

本來挺順利的, 我直接在mounted周期做了初始化, 然后剩下的操作還是交給JavaScript文件執行, 最后發現里面有很明顯的事件觸發問題.

一、事件未綁定的原因

找了整一天也沒找著這事件為什么觸發不了, 在這中間還把代碼簡化掉只留下事件觸發邏輯執行了好幾次.

第二天意識到原生代碼里的template可能有問題, 在原生環境中template標簽內部的東西是不會渲染出來的, 雖然解析器在加載頁面的時候確實會處理這部分代碼片段.

取自MDN:

將模板視為一個可存儲在文檔中以便后續使用的內容片段. 
雖然解析器在加載頁面時確實會處理 <template> 元素的內容,
但這樣做只是為了確保這些內容有效, 元素內容不會被渲染.

但是放到vue里(這里特指Vue2), 如果template標簽在Vue實例綁定的元素內部存在(即不是根元素外的那個template), 那么在DOM中該template的子元素是正常存在并顯示的, 我以前經常拿templatev-for容器.

然后聯想前面幾次結構簡化demo, 大概不是沒綁定而是綁錯了目標.

這個原生項目的HTML代碼很多, 所以作者做了一些優化, 在需要某個模塊的時候才將其appendChild加入DOM, 其余的時候這些模塊都被放在template標簽內, 而vue把這些東西都出來渲染了, 那么初始化的時候事件大概率就已經被綁到了template里面的那些代碼里, 等到這些模塊被appendChild的時候, 事件綁定已經結束了, 所以appendChild是將沒有事件綁定的DOM加到了正確位置.

我在控制臺把視口里的DOM都刪掉之后發現下面還有一層被擠出去的DOM, 那是有事件綁定的DOM.

的確是這樣.

二、如何處理原生template標簽

我是想把他appendChild這個優化留下來的, 我覺得在原生環境里能有這種封裝的思想挺好, 不過看起來不好辦…

我打算把原來那幾個模塊抽到組件里, 提前把組件寫到后面會插入到的位置, 然后用這種結構控制顯示隱藏:

<template v-if="isShow">
  <aaa></aaa>
</template>

這樣挺好的其實, 如果這個項目的結構再簡單一點我絕對會用組件方案的, 結果我發現我要傳回調函數, 傳4層干擾到3個很重要的類, 只是為了在合適的時機回調改變組件的狀態, 我覺得很糟糕.

而且, 如果后面會有…或者現在就有我沒有察覺到的需求是增加不定數量個這種模塊, 我把組件直接注冊到這里用就算是寫死了, 恐怕會不好改.

需要這種操作的組件有三個, 我想起來學后端渲染的時候給前端發的html模板, 那…能不能把這些html轉成字符串存到一個單獨的js文件, 然后在需要的地方導入后appendChild呢? 這樣對源代碼改動最小, 不用改appendChild, 也讓html文檔那邊更簡潔一些.

export const batchEditorToolsTemplate = `
  <div id="batch-editor-tools-wrapper">
	<div id="batch-editor-tools">
	  <div id="exit">退出</div>
	  <div id="prev">上一頁</div>
	  <div id="next">下一頁</div>
	  <div id="trajectory">軌跡</div>
	  <div id="auto-annotate">自動</div>
	  <div id="auto-annotate-translate-only">自動(無旋轉)</div>
	  <div id="interpolate">插值</div>
	  <div id="reload">重新加載</div>
	  <div id="finalize">定稿</div>
	</div>
  </div>
`

然后用這個工具函數把appendChild替換掉:

function analyseDomStr(str, target) { // dom字符串, 目標元素
  const template = document.createElement("template");
  template.innerHTML = str;
  target.appendChild(template.content);
}

這樣性能不如之前好, 不過——事件綁定看起來沒什么問題了.

本來想用Document.createDocumentFragment()API的, 所以初版就寫成這樣了:

function analyseDomStr(str, target) { // dom字符串, 目標元素
  const fragment = document.createDocumentFragment();
  const template = document.createElement("template");
  template.innerHTML = str;
  fragment.appendChild(template.content); // 此處還是要按照原生template的那套來的, 這個template不會被vue特殊解析
  target.appendChild(fragment);
}

很遺憾并不能直接使用innerHTMLDocumentFragment內寫入DOM, 仍舊需要appendChild來完成, 所以完全沒有必要創建DocumentFragment, 我認為這個API更加適合用于對頻繁DOM操作進行優化, 比如用戶點擊按鈕后就要插入100條tips, 那就更適合先使用這個API生成一個文檔內容分段, 然后把成品分段加入DOM.

這個初版和舊版也都是回流一次…

因為文檔片段存在于內存中, 并不在 DOM 樹中, 所以將子元素插入到文檔片段時不會引起頁面回流(對元素位置和幾何上的計算).
因此, 使用文檔片段通常會帶來更好的性能.

完全可以把:

const ul = document.querySelector("ul");
const li = document.createElement("li");
for (let i = 0; i < 100; i++) {
  ul.appendChild("li");
}

這種會引起頁面頻繁回流的寫法

改成

const ul = document.querySelector("ul");
const li = document.createElement("li");
const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
  fragment.appendChild("li");
}
ul.appendChild(fragment);

這樣頁面只會在fragmentappendChild后回流一次.

到此這篇關于Vue中原生template標簽失效如何解決的文章就介紹到這了,更多相關Vue template標簽失效內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人av三级| 婷婷激情综合| 日本一区免费网站| 欧美日韩一区二区三区不卡视频 | 高清一区二区| 97精品一区二区| 久久视频精品| 免费观看在线综合| 日韩不卡一二三区| 国产成人免费精品| 999久久久亚洲| 日韩欧美另类一区二区| 国产一区视频在线观看免费| 免费不卡在线观看| 国产精品v日韩精品v欧美精品网站| 视频在线不卡免费观看| 亚洲精品成人| 国产欧美三级| 欧美日韩精品免费观看视欧美高清免费大片| 日韩精品欧美激情一区二区| 在线一区二区三区视频| 久久99精品久久久野外观看| 精品在线播放| 18国产精品| 91精品精品| 国产日产一区| 999久久久国产精品| 亚洲一区二区三区免费在线观看| 国产欧美69| 欧美不卡在线| 亚洲3区在线| 91亚洲国产| 亚州欧美在线| 久久精品123| 欧美综合精品| 不卡在线一区二区| 日韩**一区毛片| 亚洲高清av| 国产精品**亚洲精品| 一区二区自拍| 成人在线黄色| 综合一区在线| 久久国产影院| 免费精品一区| 中文字幕一区二区三区在线视频| 日本不卡免费高清视频在线| 日韩精品一区二区三区中文在线 | 麻豆视频久久| 久久夜色精品| 成人小电影网站| 久久激情五月激情| 欧美特黄一区| 欧美天堂视频| 国产午夜久久av| 国产日韩专区| 日韩精品水蜜桃| 国产精品sss在线观看av| 国产精品丝袜xxxxxxx| 欧美freesex黑人又粗又大| 国产日韩免费| 亚洲精品在线a| 国产在线欧美| 欧美aa在线观看| 久久亚洲国产精品尤物| 国产亚洲精品精品国产亚洲综合| 日韩一区欧美二区| 欧美粗暴jizz性欧美20| 精品美女在线视频| 国产精品美女午夜爽爽| 日本麻豆一区二区三区视频| 99re国产精品| 免费久久精品| 亚洲午夜在线| 亚洲香蕉网站| 欧美成人高清| 91高清一区| 久久久久中文| 色吊丝一区二区| 国产精品成人a在线观看| 国产精品欧美三级在线观看| 91精品一区| 日韩成人一级| 亚洲18在线| 中文字幕av一区二区三区人| 在线国产日韩| 午夜电影一区| 97成人超碰| 国产精品成人自拍| 国产精品一在线观看| 日本天堂一区| 久久国产生活片100| 国产欧美激情| 国产激情久久| 精品国产91| av一区在线| 欧美+亚洲+精品+三区| 欧美99久久| 亚洲欧美日韩国产一区二区| 性色一区二区| 日韩精品视频网站| 国产日产一区| 欧美国产美女| 久久九九国产| 国产毛片一区| 日韩精品五月天| 欧美国产日韩电影| av在线最新| 99国产精品| 综合激情视频| 国产高清精品二区| 日韩伦理福利| 在线精品小视频| 蜜臀va亚洲va欧美va天堂 | 999久久久91| 国产视频一区欧美| 日韩精品一区二区三区av | 亚洲精品女人| 麻豆传媒一区二区三区| 亚洲一级少妇| 鲁大师影院一区二区三区| 深夜福利亚洲| 精品精品99| 亚洲精品1区| 国产欧美日韩精品一区二区免费 | 91看片一区| 久久午夜影视| 精品中文字幕一区二区三区| 欧美一区二区三区高清视频| 五月国产精品| 精品久久久网| 久久www成人_看片免费不卡| 欧美国产免费| 中日韩男男gay无套| 国产剧情在线观看一区| 91精品综合| 人人爱人人干婷婷丁香亚洲| 中文字幕在线视频网站| 免费的成人av| 免费观看亚洲| 欧美一级一区| 久久久久国产一区二区| 日韩一二三区在线观看| 国产中文在线播放| 国产精品美女久久久浪潮软件| 久久国内精品视频| 99久久婷婷| 国产精品三级| 9国产精品视频| 欧美xxxx中国| 亚洲精品日本| 久久婷婷久久| 国产伦精品一区二区三区视频| 蜜桃一区二区三区| 国产劲爆久久| 免费久久99精品国产| 一区二区三区四区日本视频| 日韩精品久久久久久| 九色porny丨国产首页在线| 日韩不卡在线观看日韩不卡视频| 成人免费电影网址| 国产另类在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲美女久久精品| 欧美一级二级视频| 午夜一级久久| 精品捆绑调教一区二区三区 | 中文字幕av一区二区三区四区| 电影亚洲精品噜噜在线观看| 国产精品亚洲片在线播放| 噜噜噜躁狠狠躁狠狠精品视频| 久久久成人网| 国产自产自拍视频在线观看| 日韩av网站在线观看| 国产毛片一区| 婷婷激情一区| 精品网站999| 欧美日韩精品一区二区三区视频| 99riav1国产精品视频| 欧美天堂视频| 97在线精品| 精品国产精品国产偷麻豆| 欧美伊人久久| 亚洲精品无播放器在线播放| 九色精品91| 久久在线电影| 国产在线|日韩| 韩国久久久久久| 麻豆精品在线观看| 国产乱码精品一区二区三区四区 | 美女视频一区在线观看| 日本少妇一区二区| 亚洲精品进入| 只有精品亚洲| 亚洲色图综合| 在线一区欧美| 久久xxxx| 免费成人性网站| 国产亚洲福利| 夜久久久久久| 亚洲一区二区毛片|