Appearance
获取dom
本节目标:理解“获取dom”的核心思路,并能把它用于实际开发或面试表达。
**体验****setup****周期,** **和****onBeforeMount****周期**
<template> <div></div></template>
<scriptlang="ts">import{ defineComponent, onBeforeMount, onBeforeUnmount } from'vue';
exportdefaultdefineComponent({ name: '', setup(){ // 相当于beforeCreated 和 createdconsole.log('setUp...'); onBeforeMount(() =>{ console.log('onBeforeMount...'); }) onMounted(()=>{ console.log('onMounted...'); }) },});</script><stylescoped></style>
**onBeforeUpdate****当数据发生的时候执行**
{{name}} <button @click="name='李四'">改变名字</button> letname = ref('张三') onBeforeUpdate(()=>{ console.log('onBeforeUpdate'); })**onUpdated onBeforeUnmount onUnmounted** **这几个生命周期一起尝试**
onUpdated(()=>{ // 数据更新时console.log('onUpdated'); }) onBeforeUnmount(()=>{ // 页面销毁之前console.log('onBeforeUnmount'); }) onUnmounted(()=>{ // 页面销毁console.log('onUnmounted..'); })**onActivated onDeactivated** **开启了****keeplive****缓存才会执行**
需要注意的是keep-alive的写法在vue3中变成slot形式了
App.vue中 <router-view v-slot="{ Component }"> <keep-alive><component:is="Component"/></keep-alive></router-view> life.vue中 onActivated(()=>{ console.log('onActivated..'); }) onDeactivated(()=>{ console.log('onDeactivated'); })**二、** **获取****Dom****和****nextTick**
在vue2中可以使用this.$refs获取一个dom或者多个dom, 但在vue3中获取dom和vue2有些不同
**Vue3****中获取单个****dom**
setup相当于create, 此时页面还没有初始化, 因此在nextTick中获取dom
<template> <div><divref="name">张三</div></div></template>
<scriptlang="ts">import{ defineComponent,nextTick ,ref} from'vue';
exportdefaultdefineComponent({ name: '', setup(){ letname = ref<any>('') nextTick(()=>{ console.log(name.value,'dom'); console.log(name.value.innerHTML,'内容'); }) return{ name } }});</script><stylescoped></style>**vue3****中获取多个****dom,** **获取多个****dom****得用方法**
<div :ref="getFruit">香蕉</div><div:ref="getFruit">梨子</div><div:ref="getFruit">菠萝</div>setup(){ letname = ref<any>('') nextTick(()=>{ console.log(name.value,'dom'); console.log(name.value.innerHTML,'内容'); }) letgetFruit = (e:any) =>{ console.log(e); } return{ name, getFruit } }**需要在****nextTick****中获取****dom**
letname = ref<any>('') letfruitArr:any[] = [] letgetFruit = (el:any) =>{ fruitArr.push(el) } nextTick(()=>{ console.log(name.value,'dom'); console.log(name.value.innerHTML,'内容'); console.log(fruitArr,'fruitArr数据..'); })**在****vue3****中****,** **用****vue2****的方式获取****dom**
在setup后接着写生命周期方法就好了 mounted () { console.log((thisasany).$refs['name'].innerHTML,'vue2中mouted'); }分类: 前端 标签: Vue.js前端 作者:阿俊来玩掘金 链接:https://juejin.cn/post/6978069303438344205 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
