import { useTemplateRef } from 'vue'
<div ref="dom" class="base active" style="color: #f40;padding: 10px;" data-ind="100" > hi,there <span>88</span> </div>
import { useTemplateRef, onMounted } from 'vue' let dom = useTemplateRef('dom') onMounted(() => { console.log(dom); console.log(dom.value); console.log(dom.value.innerText); console.log('nodes', dom.value.childNodes[0]); console.log('children', dom.value.children[0]); console.log('classList', dom.value.classList); console.log('className', dom.value.className); console.log('style', dom.value.style); console.log('getAttribute', dom.value.getAttribute('data-ind')); console.log('getAttribute', dom.value.getAttribute('style')); console.log('getAttribute', dom.value.getAttribute('class')); })
<input type="text" ref="ipt" placeholder="your name" autofocus>
<div class="home"> <input type="text" ref="ipt" placeholder="your name"> // Other </div>
import { useTemplateRef, onMounted } from 'vue'; const ipt = useTemplateRef('ipt') onMounted(() => { ipt.value.focus() })
<div class="home"> <input type="text" ref="ipt"> </div> <button @click="focus">click for focus</button>
import { useTemplateRef, onMounted } from 'vue'; const ipt = useTemplateRef('ipt') const focus = () => ipt.value.focus() onMounted(() => { ipt.value.focus() })
<template> <div @click="getTitle">only for test - {{ title }}</div> </template> <script setup> import { ref } from 'vue'; let title = ref(18) function getTitle() { console.log(title.value); } defineExpose({ title, getTitle }) </script>
<div v-for="(item,index) in 10" ref="navRef">{{item}}</div>
const navRef = useTemplateRef('navRef') onMounted(() => { navRef.value.forEach(item => { console.log(item.innerHTML); }) })
<header class="header" ref="header">header</header>
import { onMounted, onUnmounted, useTemplateRef } from 'vue' const header = useTemplateRef('header') const fn = () => { header.value.classList.toggle('fixed', window.scrollY > 1000) } onMounted(() => { window.addEventListener('scroll', fn) }) onUnmounted(() => { window.removeEventListener('scroll', fn) })
<div class="tab-box" ref="tab-box"></div>
import { onMounted, onUnmounted, useTemplateRef } from 'vue' const tabBox = useTemplateRef('tab-box') onMounted(() => { window.onscroll = function () { const rect = tabBox.value.getBoundingClientRect() if (rect.top <= 0) { tabBox.value.classList.add('sticky') } else { tabBox.value.classList.remove('sticky') } } }) onUnmounted(() => { window.onscroll = null })
[] 使用事件监听 addEventListener() 和 样式的 toggle() 优化
onMounted(() => { window.addEventListener('scroll', () => { let rect = tabBox.value.getBoundingClientRect() tabBox.value.classList.toggle('sticky', rect.top <= 0) }) })