IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 生命周期,vue中的axios,ref引用($refs),$nextTick -> 正文阅读

[JavaScript知识库]生命周期,vue中的axios,ref引用($refs),$nextTick

生命周期

组件从创建到销毁的整个过程就是生命周期

在这里插入图片描述

钩子函数

vue框架内置函数,随着组件的生命周期阶段,自动执行

作用:特定的时间 执行特定的操作

场景:组件创建完毕,可以在created生命周期函数中发起ajax请求 从而初始化data数据

分为4大阶段

创建

在这里插入图片描述

new Vue() vue实例化(组件是一个小的vue实例)
init event  Lifecycle  初始化事件和生命周期函数
beforeCreate  生命周期函数被执行
init injections   vue内部添加data和methods
created   生命周期函数被执行  实例创建
Has el option 是否有el选项  检查要挂到哪里
   有   继续检查template选项
   没有  调用$mount方法
  • beforeCreate
  • created
挂载

在这里插入图片描述

template选项检查
有 --编译template返回render渲染函数
没有 编译el选项对应标签作为template 要渲染的模板
虚拟DOM挂载成真实Dom之前
beforeMount 生命周期钩子函数
把虚拟DOM和渲染的数据一并挂到真实Dom上
真实dom挂载完毕
mounted生命周期钩子函数
  • beforeMount
  • mounted
更新

在这里插入图片描述

data里数据改变,更新Dom之前
beforeUpdate  生命周期钩子函数
Virtual Dom 虚拟DOM重新渲染 打补丁到真实Dom
updated 生命周期钩子函数
当有data数据改变 重复这个循环
  • beforeUpdate
  • updated
销毁

在这里插入图片描述

当$destroy()被调用  比如组件DOM被移除(v-if)
beforeDestroy  生命周期钩子函数
拆卸数据监听器,子组件,和事件侦听器
实例销毁后触发最后一个钩子函数
destroyed 生命周期钩子函数
  • beforeDestroy
  • destroyed

vue中axios的使用

  • 安装

    npm install axios
    
  • 使用

    <template>
      <div>
        <p>获取所有的图书信息</p>
        <button @click="getAllFn">点击 --查看</button>
      </div>
    </template>
    
    <script>
    // 下载axios
    // 引入axios
    // 发起axios请求
    import axios from 'axios'
    export default {
      methods: {
        // getAllFn() {
        //   axios({
        //     url: 'http://www.liulongbin.top:3006/api/getbooks',
        //     method: 'GET',
        //   }).then((res) => {
        //     console.log(res)
        //   })
        // },
        async getAllFn() {
          let res = await axios.get('http://www.liulongbin.top:3006/api/getbooks')
          console.log(res)
        },
      },
    }
    </script>
    

axios全局配置

目标: url的前缀统一设置

// main.js

import axios from 'axios'

axios.defaults.baseURL = 'http://www.liulongbin.top:3006';

// 挂载到Vue原型上  任何一个组件都可以调用Vue原型上的$axios属性
Vue.prototype.$axios = axios

组件中

<script>
export default {
  created() {
    this.getdata()
  },
  methods: {
    async getdata() {
      let res = await this.$axios.get('/api/getbooks')
      console.log(res)
    },
  },
}
</script>

$refs

获取DOM和子组件

利用ref和$refs可以用于获取DOM元素

语法

ref定义值,通过$refs.值来获取原生dom元素

ref定义值,通过$refs.值来获取组件对象,就能继续调用组件内的变量

<template>
  <div>
    <p>获取原生dom元素</p>
    <h1 id="h" ref="myh">我是一个h1标记</h1>
    <child ref="myc"></child>
  </div>
</template>

<script>
import Child from './Child.vue'
/* 
1:用来获取dom元素
2:可以获取组件对象
*/
export default {
  components: { Child },
  mounted() {
    // console.log(document.getElementById('h')) //h1
    // console.log(this.$refs.myh) //h1
    console.log(this.$refs.myc)
    let childobj = this.$refs.myc
    childobj.fn()
    console.log(childobj.msg)
  },
}
</script>

$nextTick使用

由于Vue更新dom是异步进行的,也就是说直接在异步更新操作还未完成前获取到的页面元素是旧的页面元素。
Vue.$nextTick(回调函数)dom更新完会挨个触发$nextTick里的回调函数体

<template>
  <div>
    <p ref="myp">{{ count }}</p>
    <button @click="btn">点击count+1 直接获取p标签内容</button>
  </div>
</template>

<script>
// 点击执行count++ 马上获取p标签的内容 无法拿到新值
export default {
  data() {
    return {
      count: 0,
    }
  },
  methods: {
    btn() {
      this.count++
      console.log(this.$refs.myp.innerHTML)//0
      //  vue更新dom异步
      // 解决this.$nextTick()
      // dom更新完会挨个触发$nextTick里的回调函数体
      this.$nextTick(() => {
        console.log(this.$refs.myp.innerHTML, 'p')
      })
    },
  },
}
</script>

$nextTick场景

<template>
  <div>
    <input v-if="isShow" ref="myInp" type="text" placeholder="这是一个输入框" />

    <button v-else @click="btn">点我进行搜索</button>
  </div>
</template>

<script>
/*
 点击按钮按钮消失  输入框出现并聚焦
 1:获取到输入框
 2:输入框调用事件方法focus达到聚焦行为
*/
export default {
  data() {
    return {
      isShow: false,
    }
  },
  methods: {
    btn() {
      this.isShow = true
      // this.$refs.myInp.focus()
      // data变化更新dom是异步的
      // 输入框还没有挂载到真实dom上
      this.$nextTick(() => {
        this.$refs.myInp.focus()
      })
    },
  },
}
</script>

扩展 :await取代回调函数

async btn() {
	this.isShow = true
	// $nextTick()返回promise对象
	await this.$nextTick()
	this.$refs.myInp.focus()
},

复习:async/await

async/await其实是Promise的语法糖,它能实现的效果都能用then链来实现。从字面上来看,async是“异步”的简写,await译为等待,所以我们很好理解async声明function是异步的,await等待某个操作完成。当然语法上强制规定await只能出现在asnyc函数中

  • 我们先来看看async函数返回了什么:
async function testAsy(){
   return 'hello world';
}
let result = testAsy(); 
console.log(result)

这个async声明的异步函数,把return后面直接量通过Promise.resolve()返回Promise对象关于Promise.resolve()),所以如果这个最外层没有用await调用的话,是可以用原来then链的方式来调用的:

async function testAsy(){
   return 'hello world'
}
let result = testAsy() 
console.log(result)
result.then(v=>{
    console.log(v)   //hello world
})

联想一下Promise特点——异步无等待,所以当没有await语句执行async函数,它就会立即执行,返回一个Promise对象,非阻塞,与普通的Promise对象函数一致。

  • 重点就在await,它等待什么呢?

按照语法说明,await等待的是一个Promise对象,或者是其他值(也就是说可以等待任何值),

如果等待的是Promise对象,则返回Promise的处理结果;
如果是其他值,则返回该值本身。

并且await会暂停当前async function的执行,等待Promise的处理完成。
若Promise正常处理(fulfillded),其将回调的resolve函数参数作为await表达式的值,继续执行async function;
若Promise处理异常(rejected),await表达式会把Promise异常原因抛出;
另外如果await操作符后面的表达式不是一个Promise对象,则返回该值本身。

更多…

我的笔记

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:55:10  更:2022-08-19 18:59:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:45:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码