vue(4)

83 阅读3分钟

vue第四天

一、Vue生命周期

1.什么是Vue生命周期?

从创建到销毁的整个过程就是 – Vue实例的 - 生命周期

2.钩子函数

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

(1)作用: 特定的时间点,执行特定的操作

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

(3)分类: 4大阶段8个方法 1653050992501.png

3.Vue实例从创建到显示都经历了哪些钩子函数?

beforeCreate / created / beforeMount / mounted

4.created函数里, 能获取真实DOM吗?

不能获取真实DOM

5.在什么钩子函数里可以获取真实DOM?

mounted

二、axios使用

1.作用:

axios 是一个专门用于发送ajax请求的库,axios 底层还是原生js实现, 内部通过Promise封装的

2.什么是ajax? ajax原理?axios是什么?

一种前端异步请求后端的技术

浏览器window接口的XMLHttpRequest

基于原生ajax+Promise技术封装通用于前后端的请求库

3.axios如何请求数据呢?

(1)基本用法

import axios from 'axios'  // 局部
export default {
  methods: {
    getBooks() {
      // axios 发请求只需要带上一个配置对象
      axios({
        // url 地址
        url: 'http://123.57.109.30:3006/api/getbooks',
        // method 请求方法
        method: 'get'
      }).then(res=>{
        // 这个库有个特点, 会将你发请求的配置放在返回中一起交给你, 最终的数据, 其实是放在 res.data
        console.log(res.data);
      })
    }
  }
}

(2)get请求带参方式

        params: {
          // get 请求的传输只能用参数方式
          // query 查询字符串的传参方式 => 这个参数会在 url 后面用 ?a=1 的形式拼接
          bookname: this.bookName
        }

(3)post 请求带参方式

        data: {
          // post 请求一般用这个方式带参数, 实际的作用是将数据放入到请求载荷(请求体)中
          appkey: "7250d3eb-18e1-41bc-8bb2-11483665535a",
          ...this.bookData
        }

其实 params 和 data 的传参方式一个用在 get 一个用在 post 这种说法只是一般约定, 但是技术上其实可以有例外, 比较确定的区别是, params 会将数据待在 url? 后面查询字符串, data 将数据放在请求载荷(请求体)

4.延展运算符(可理解为去括号)
// ... 展开运算符/延展运算符
// ...[1,2,3] => 1,2,3
// ...{name: 'tom', age: 13} => name: 'tom', age: 13
// const arr = [1,2,3]
// const arr2 = arr
// arr2[1] = 666
// const arr2 = [...arr]
// console.log(...[1,2,3]) => console.log(1,2,3);
// console.log(...{name: 'tom', age: 13}) => console.log(name: 'tom', age: 13)
5.axios全局封装

(1)改造全局配置

// /src/utils/request.js
// 改造 axios 添加基地址后重新导出
import axios from 'axios'
axios.defaults.baseURL = 'http://123.57.109.30:3006/api'

export default axios

(2)封装api函数管理层

// /src/api/book.js
// 这里是统一管理关于书籍的请求接口函数
// 获取书籍的a
import request from '@/utils/request'pi
export function getBooks(params) {
  return request({
    // url 地址
    url: '/getbooks',
    // method 请求方法
    method: 'get',
    params: params,
    data: {
      a:666
    }
  })
}
// App.vue 最终使用
import {getBooks} from '@/api/book'
const params = {
  bookname: this.bookName
}
getBooks(params).then(res=>{
  // 这个库有个特点, 会将你发请求的配置放在返回中一起交给你, 最终的数据, 其实是放在 res.data
  console.log('成功');
  console.log(res.data);
}).catch(err=>{
  console.log(err);
})

三、refsrefs和nextTick使用

1.作用

通过id或ref属性获取原生DOM

2.基本使用
<template>
  <div>
    <!-- vue 获取元素的方法第一步设置一个 ref 属性 -->
    <div id="myBox" ref="myBoxRef">盒子</div>
  </div>
</template>

<script>
export default {
  mounted() {
    // console.log(document.getElementById('myBox'));
    // vue 当中获取元素方法第二部 this.$refs.名字
    console.log(this.$refs.myBoxRef);
  }
}
</script>

<style>

</style>
3.获取子组件内的属性和方法
  components: {MyBox},
  mounted() {
    // console.log(document.getElementById('myBox'));
    // vue 当中获取元素方法第二部 this.$refs.名字
    // console.log(this.$refs.myBoxRef);
    // 用id获取组件
    console.log(document.getElementById('zjBox'));
    // 用ref获取组件
    console.log(this.$refs.zjBoxRef);
    setTimeout(() => {
      this.$refs.zjBoxRef.msg = '789'
      this.$refs.zjBoxRef.dajiao()
    }, 1000);
  
  }
4.$nextTick(回调函数)

(1)基本使用

等待当前所有代码执行完毕, 页面更新结束之后执行传入的回调函数,可解决异步问题

(2)代码

    toggleShow() {
      this.isShow = !this.isShow
      // 希望每次显示的时候都将这个 dom 打印在控制台
      // console.log(this.$refs.myBox);
      // this.$nextTick(回调函数) 作用是等待页面更新完毕执行回调函数
      this.$nextTick(()=>{
        console.log(this.$refs.myBox);
      })
    }