Rumah >hujung hadapan web >View.js >Bagaimanakah Vue3 mengendalikan dom? Empat cara untuk memperkenalkan
VueBagaimana untuk mengendalikan dom? Artikel berikut akan memperkenalkan kepada anda empat cara untuk mengendalikan dom dalam Vue3. Saya harap ia akan membantu anda!
Baru-baru ini, pengurus produk telah mengemukakan banyak keperluan untuk pengoptimuman pengalaman pengguna, yang melibatkan banyak operasi DOM.
Xiao Zhang: "Old Tie, dahulunya agak mudah untuk mengendalikan DOM semasa membangunkan projek Vue2. Sekarang saya sedang membangunkan projek Vue3, dan saya tiba-tiba berasa keliru!" >
Saya: "Tidak mengapa, prinsipnya hampir sama, anda sepatutnya baik-baik saja jika anda menyemak maklumat tersebut!”Ini ialah ringkasan cara biasa untuk mengendalikan DOM dalam Vue3! (Belajar perkongsian video:tutorial video vue)
<template> <div> <div ref="sectionRef"></div> </div> </template> <script setup> import {ref} from 'vue' const sectionRef = ref() </script>Tambahkan rujukan pada Atribut elemen div , untuk mendapatkan elemen ini, kami mengisytiharkan sectionRef pembolehubah dengan nama yang sama dengan atribut ref, dan kemudian kami boleh mendapatkan elemen div dalam bentuk sectionRef.value.
<template> <div> <p>通过ref直接拿到dom</p> <div ref="sectionRef"></div> <button @click="higherAction">变高</button> </div> </template> <script setup> import {ref} from 'vue' const sectionRef = ref() let height = 100; const higherAction = () => { height += 50; sectionRef.value.style = `height: ${height}px`; } </script> <style scoped> .demo1-container { width: 100%; height: 100%; .ref-section { width: 200px; height: 100px; background-color: pink; transition: all .5s ease-in-out; } .btn { width: 200px; height: 50px; background-color: gray; color: #fff; margin-top: 100px; } } </style>
<template> <div> <div ref="listRef"> <div @click="higherAction(index)" v-for="(item, index) in state.list" :key="index"> <span>{{item}}</span> </div> </div> </div> </template> <script setup> import { ref, reactive } from 'vue' const listRef = ref()Tambahkan atribut ref pada elemen induk dan isytiharkan a Pembolehubah listRef dengan nama yang sama dengan atribut ref Pada masa ini, objek dom yang mengandungi elemen anak akan diperolehi melalui listRef.value Pada masa ini, anda. boleh menggunakan listRef.value.children[index] Bentuk mendapatkan dom sub-elemen
<template> <div> <p>通过父容器遍历拿到dom</p> <div ref="listRef"> <div @click="higherAction(index)" v-for="(item, index) in state.list" :key="index"> <span>{{item}}</span> </div> </div> </div> </template> <script setup> import { ref, reactive } from 'vue' const listRef = ref() const state = reactive({ list: [1, 2, 3, 4, 5, 6, 7, 8] }) const higherAction = (index: number) => { let height = listRef.value.children[index].style.height ? listRef.value.children[index].style.height : '20px'; height = Number(height.replace('px', '')); listRef.value.children[index].style = `height: ${height + 20}px`; } </script> <style scoped> .demo2-container { width: 100%; height: 100%; .list-section { width: 200px; .list-item { width: 200px; height: 20px; background-color: pink; color: #333; transition: all .5s ease-in-out; display: flex; justify-content: center; align-items: center; } } } </style>
<template> <div> <div> <div :ref="setRefAction" @click="higherAction(index)" v-for="(item, index) in state.list" :key="index"> <span>{{item}}</span> </div> </div> </div> </template> <script setup> import { reactive } from 'vue' const state = reactive({ list: [1, 2, 3, 4, 5, 6, 7], refList: [] as Array<any> }) const setRefAction = (el: any) => { state.refList.push(el); } </script>Panggil melalui:kaedah setRefAction gelung ref, kaedah ini akan menerima parameter el secara lalai Parameter ini ialah elemen div yang perlu kita perolehi
<. . berbilang elemen dijana melalui gelung v-untuk>
Melalui ref melalui pemancar subkomponen
<template> <div> <p>通过:ref将dom引用放到数组中</p> <div> <div :ref="setRefAction" @click="higherAction(index)" v-for="(item, index) in state.list" :key="index"> <span>{{item}}</span> </div> </div> </div> </template> <script setup> import { reactive } from 'vue' const state = reactive({ list: [1, 2, 3, 4, 5, 6, 7], refList: [] as Array<any> }) const higherAction = (index: number) => { let height = state.refList[index].style.height ? state.refList[index].style.height : '20px'; height = Number(height.replace('px', '')); state.refList[index].style = `height: ${height + 20}px`; console.log(state.refList[index]); } const setRefAction = (el: any) => { state.refList.push(el); } </script> <style scoped> .demo2-container { width: 100%; height: 100%; .list-section { width: 200px; .list-item { width: 200px; height: 20px; background-color: pink; color: #333; transition: all .5s ease-in-out; display: flex; justify-content: center; align-items: center; } } } </style>
<template> <div ref="cellRef" @click="cellAction"> <span>{{item}}</span> </div> </template> <script setup> import {ref} from 'vue'; const props = defineProps({ item: Number }) const emit = defineEmits(['cellTap']); const cellRef = ref(); const cellAction = () => { emit('cellTap', cellRef.value); } </script>Berbilang halaman mungkin mempunyai senario komponen pengendalian DOM
【Tutorial video berkaitan yang disyorkan:
Tutorial pengenalan VuejsAtas ialah kandungan terperinci Bagaimanakah Vue3 mengendalikan dom? Empat cara untuk memperkenalkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!