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

Vue操作DOM解決顯示位置問題

 更新時間:2024年12月18日 08:28:42   作者:RePeaT  
這篇文章主要介紹了Vue操作DOM解決顯示位置問題,文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

近來遇到的一個需求,簡單記錄一下思考和解決的過程

一、需求

上傳卡片按鈕,可顯示在上傳文件列表的首位,也可顯示在末尾。

簡化代碼如下:

// custom-upload 組件
<div class="wrapper" id="wrapper">
  <el-upload />
  <FilePreview  
    v-for="item in fileList"
    :key="item.id"
    :src="item.url" />
</div>

上傳卡片按鈕和上傳文件列表在一個div元素內(nèi),上傳卡片按鈕是div的第一個子元素,

需要擴展組件功能,上傳卡片按鈕可為div的最后一個元素

二、解決辦法及思路

一、增加prop參數(shù),用來控制上傳卡片的顯示位置,默認在首位

<script lang="ts" setup>
interface IProps {
  position?: 'first' | 'last'
}

const props = withDefaults(defineProps<IProps>(), {
  position: 'first',
})
</script>

二、控制上傳卡片按鈕的位置

(1)第一想法是,直接復制在一份在<FilePreview/ >后面,

通過參數(shù)控制顯示第一個還是最后一個,

此方法雖然方便快捷,但也有兩點缺點。

<div class="wrapper">
  <el-upload v-if="props.position === 'first'" />
  <FilePreview  
    v-for="item in fileList"
    :key="item.id"
    :src="item.url" />
  <el-upload v-if="props.position === 'last'" />
</div>
  • 代碼重復,不夠優(yōu)雅
  • <el-upload />上屬性多,后期維護,改了第一個組件,容易漏掉最后一個組件,造成bug

(2)為了解決代碼重復的問題,在想到將<el-upload />組件封裝成組件,不失為一個好辦法,

但是由于<el-upload />上屬性太多,要寫很多prop。

(3)在進一步思考,在本組件內(nèi),可操作DOM,達到移動的目的。上面兩個問題都可以解決

onMounted(() => {
  if (props.position === 'last') { 
    const container: any = document.getElementById('wrapper')
    const firstItem: any = container.firstChild
    container.appendChild(firstItem)
  }
})

在vue中操作DOM的代碼要寫在onMounted中,此時組件掛載完成,DOM可確保獲取到。

操作DOM需要三步:

  • 獲取div父元素:通過document.getElementById獲取div元素
  • 獲取上傳按鈕卡片:通過firstChild屬性,獲取上傳卡片按鈕
  • 移動:在通過appendChild方法移動到div的末尾

DOM操作步驟確定,滿足上面三步的方法,還可以變換,比如:

onMounted(() => {
  if (props.position === 'last') { 
    const container: any = document.querySelector("#wrapper")
    const firstItem: any = container.childNodes[0]
    container.insertBefore(firstItem, null)
  }
})
  • 獲取div父元素:通過document.querySelector獲取div元素
  • 獲取上傳按鈕卡片:通過childNodes屬性的,獲取上傳卡片按鈕
  • 移動:在通過insertBefore方法,將第一個元素插入到最后

三、DOM方法整理

appendChild():用于向元素的末尾添加一個節(jié)點

insertBefore():把節(jié)點放在元素中某個特定的位置上

replaceChild():替換子元素中某個節(jié)點

cloneNode():復制一個節(jié)點

const container: any = document.getElementById('wrapper')
container.appendChild(newNode)
container.insertBefore(newNode, targetNode)
container.replaceChild(newNode, targetNode)
container.cloneNode() 

到此這篇關于Vue操作DOM解決顯示位置問題的文章就介紹到這了,更多相關Vue DOM顯示位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何將HTML頁面改寫到vue項目中詳解

    如何將HTML頁面改寫到vue項目中詳解

    html和vue都是前端技術中非常重要的一部分,其中html是web開發(fā)的基石,而vue則是現(xiàn)代化的前端開發(fā)框架之一,下面這篇文章主要給大家介紹了關于如何將HTML頁面改寫到vue項目中的相關資料,需要的朋友可以參考下
    2024-08-08
  • vue-cli3配置與跨域處理方法

    vue-cli3配置與跨域處理方法

    這篇文章主要介紹了vue-cli3配置與跨域處理方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • vue中的data,computed,methods,created,mounted用法及說明

    vue中的data,computed,methods,created,mounted用法及說明

    這篇文章主要介紹了vue中的data,computed,methods,created,mounted用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue.config.js里面的devserver如何配置

    vue.config.js里面的devserver如何配置

    本文介紹了vue.config.js中devServer的常見配置方式,包括基本配置、代理配置、熱模塊替換、靜態(tài)資源服務、HTTPS配置、多代理配置以及其他配置項,幫助開發(fā)者根據(jù)項目需求進行定制
    2025-01-01
  • vue中格式化時間過濾器代碼實例

    vue中格式化時間過濾器代碼實例

    這篇文章主要介紹了vue格式化時間過濾器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • vue+echarts實現(xiàn)多條折線圖

    vue+echarts實現(xiàn)多條折線圖

    這篇文章主要為大家詳細介紹了vue+echarts實現(xiàn)多條折線圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • petite vue 基本使用指南示例小結

    petite vue 基本使用指南示例小結

    petite-vue 是為漸進增強而優(yōu)化的另一種 Vue 發(fā)行版,它提供與標準 Vue 相同的模板語法和反應性心智模型,這篇文章主要介紹了petite vue 基本使用指南,需要的朋友可以參考下
    2024-07-07
  • vue cli4.0項目引入typescript的方法

    vue cli4.0項目引入typescript的方法

    這篇文章主要介紹了vue cli4.0項目引入typescript的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 關于vue-property-decorator的基礎使用實踐

    關于vue-property-decorator的基礎使用實踐

    這篇文章主要介紹了關于vue-property-decorator的基礎使用實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • element-ui如何在table中使用tooltip

    element-ui如何在table中使用tooltip

    這篇文章主要介紹了element-ui如何在table中使用tooltip問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

荥阳市| 万州区| 开平市| 遵化市| 赫章县| 昭苏县| 浦北县| 大冶市| 蓝山县| 嘉定区| 望奎县| 余干县| 望江县| 安阳市| 盐津县| 虞城县| 东兰县| 涞水县| 阳曲县| 祥云县| 恩平市| 平邑县| 汶川县| 邯郸市| 兰坪| 乾安县| 莱州市| 巩义市| 肇州县| 东宁县| 九龙城区| 常山县| 秀山| 交城县| 云龙县| 武陟县| 北辰区| 进贤县| 应用必备| 新密市| 乌拉特后旗|