程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • Vue

    • Vue基础
    • Vue前置知识
    • webpack
    • Vue基本使用
    • Vue基本使用+
    • Vue组件
    • Vue生命周期
    • Vue生命周期+
      • nextTick基本使用
      • 应用场景
      • 组件name属性作用
      • 动态组件
      • 组件缓存
        • 扩展2个钩子函数
      • 昨日复习
    • Vue插槽
    • Vue组件库
    • 网易云音乐案例
    • 案例
    • Vuex
    • Vue3.0
    • vue动画
    • 项目常用

    • 问题记录

    • vue模板
  • Nuxt

  • Echarts

  • Node

  • git

  • express

  • 微信小程序

  • Spring

  • 后端知识

  • Markdown

  • project

  • 自用文档查询

  • 框架和软件
  • Vue
yuadh
2022-03-02
目录

Vue生命周期+

# nextTick基本使用

作用 在DOM 更新之后,获取异步更新的 DOM 元素

data 里的数据改变 DOM 的更新是异步的

<template>
	<div>
        <p ref="a">{{count}}</p>
        <button @click="fn">test</button>
    </div>
</template>

<scirpt>
	export default{
    data(){
    	return:{
    		count:0
    	}
    },
    methods:{
    	fn(){
    		this.count++;
   			console.log(this.$refs.a.innerHTML)//0
    	}
    }
    }
</scirpt>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

vue监测数据更新,开启一个 DOM 更新队列

获取的标签是更新之前的

因此获取更新后的 DOM 需要在

  • updated
  • $nextTick

方法演示

methods:{
	btn(){
		this.count++
		this.$nextTick(()=>{
			console.log(this.$refs.a.innerHTML)
		})
	}
}
1
2
3
4
5
6
7
8

过程: DOM 更新完会挨个出发 $nextTick 里的函数体

# 应用场景

点击按钮出现输入框自动聚焦,隐藏按钮

<template>
	<input ref="yu" v-if="isShow" type="text" placeholder="输入框">
	<button v-else @click="fn"></button>
</template>
<script>
    export default{
        data(){
            return{
                isShow:false
            }
        },
        methods:{
            fn(){
                this.isShow=true;
                //this.$refs.yu.focus(); //因为在dom更新之前所以获取到的是 undefined 
                this.$nextTick(()=>{
                    this.$refs.yu.focus()//
                })
            }
        }
    }
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

此处可以利用 $nextTick 返回的是一个 Promise 对象,这样写

async btn(){
	this.isShow = true
	await this.$nextTick()
	this.$refs.yu.focus();
}
1
2
3
4
5

$nextTick函数返回的是一个 Promise对象

获取标签调用事件

# 组件name属性作用

组件的内置名自定义

可以用来给组件起名

export default{
	name:"yuadh_mk"
}
1
2
3

导入模块

<template>
	<yuadh_name></yuadh_name>
</template>

import yuadh from './yuadh'
export default{
    components:{
        [yuadh.name]:yuadh
    }
}
1
2
3
4
5
6
7
8
9
10

# 动态组件

组件指定

<template>
	<div>
        <component :is="comName"></component>
    </div>
</template>
1
2
3
4
5

场景 同一个挂载点--切换组件显示

  1. 创建要被切换的组件 -标签+样式
  2. 引入到要展示的 vue 文件内,注册
  3. 变量-承载要显示的组件名
  4. ...

# 组件缓存

动态组件的显示会频繁的创建组件和销毁组件

创建组件后的生命周期 created()

销毁组件后的生命周期 destroyed()

使用 keep-alive 组件将不必要销毁的组件缓存起来

<keep-alive>
	<component :is="comName"></component>
</keep-alive>
1
2
3

# 扩展2个钩子函数

  • activated() 获得激活状态
  • deactivated() 失去激活状态

当组件失去焦点

# 昨日复习

vue生命周期

组件之间通信

  • 需求
  • 静态页面
  • 数据铺设
  • 交互
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
Vue生命周期
Vue插槽

← Vue生命周期 Vue插槽→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×