VUE生命周期与路由

1.vue生命周期

  •   相关函数
阶段方法名方法名
初始化beforeCreatecreated
挂载beforeMountmounted
更新beforeUpdateupdated
销毁beforeUnmountunmounted

1.初始化

1.new Vue() – Vue实例化(组件也是一个小的Vue实例)

2.Init Events & Lifecycle – 初始化事件和生命周期函数

3.beforeCreate – 生命周期钩子函数被执行

4.Init injections&reactivity – Vue内部添加data和methods等

5.created – 生命周期钩子函数被执行, 实例创建

<!-- 视图层 -->
<template>
  <div></div>
</template>

<!-- 逻辑层 -->
<script>
export default {
  name: "",
  data() {
    return {
      msg: "hello, Vue",
    };
  },
  // 一. 初始化
  // createApp(App)以后, vue内部给实例对象添加了一些属性和方法, data和methods初始化"之前"
  beforeCreate() {
    console.log("beforeCreate -- 执行");
    console.log(this.msg); // undefined
  },
  // data和methods初始化以后
  // 场景: 网络请求, 注册全局事件
  created() {
    console.log("created -- 执行");
    console.log(this.msg); // hello, Vue

    this.timer = setInterval(() => {
      console.log("哈哈哈");
    }, 1000);
  },
};
</script>

<!-- 样式层 -->
<style lang="" scoped>
</style>

 

 从运行结果可以看出来created()运行之前data数据是undefined,说明beforeCreate之前初始化事件和生命周期函数并没有初始化data.所以请求数据就应该在created()函数里.

 

2.挂载

1.template选项检查

有 - 编译template返回render渲染函数

无 – 编译el选项对应标签作为template(要渲染的模板)

2.虚拟DOM挂载成真实DOM之前

3.beforeMount – 生命周期钩子函数被执行

4.Create … – 把虚拟DOM和渲染的数据一并挂到真实DOM上

5.真实DOM挂载完毕

6.mounted – 生命周期钩子函数被执行

<template>
  <div>
      <p>学习生命周期 - 看控制台打印</p>
      <p id="myP">{{ msg }}</p>
  </div>
</template>

<script>
export default {
    // ...省略其他代码
    
    // 二. 挂载
    // 真实DOM挂载之前
    // 场景: 预处理data, 不会触发updated钩子函数
    beforeMount(){
        console.log("beforeMount -- 执行");
        console.log(document.getElementById("myP")); // null

        this.msg = "重新值"
    },
    // 真实DOM挂载以后
    // 场景: 挂载后真实DOM
    mounted(){
        console.log("mounted -- 执行");
        console.log(document.getElementById("myP")); // p
    }
}
</script>

 

 从结果来看在beforeMount()函数并没有获取到dom对象,是在beforeMount()之后才获取到.

说明挂载是在beforeMount()与Mounted()之间进行的

3.更新

1.当data里数据改变, 更新DOM之前

2.beforeUpdate – 生命周期钩子函数被执行

3.Virtual DOM…… – 虚拟DOM重新渲染, 打补丁到真实DOM

4.updated – 生命周期钩子函数被执行

5.当有data数据改变 – 重复这个循环

<template>
  <div>
      <p>学习生命周期 - 看控制台打印</p>
      <p id="myP">{{ msg }}</p>
      <ul id="myUL">
          <li v-for="(val, index) in arr" :key="index">
              {{ val }}
          </li>
      </ul>
      <button @click="arr.push(1000)">点击末尾加值</button>
  </div>
</template>

<script>
export default {
    data(){
        return {
            msg: "hello, Vue",
            arr: [5, 8, 2, 1]
        }
    },
    // ...省略其他代码

    // 三. 更新
    // 前提: data数据改变才执行
    // 更新之前
    beforeUpdate(){
        console.log("beforeUpdate -- 执行");
        console.log(document.querySelectorAll("#myUL>li")[4]); // undefined
    },
    // 更新之后
    // 场景: 获取更新后的真实DOM
    updated(){
        console.log("updated -- 执行");
        console.log(document.querySelectorAll("#myUL>li")[4]); // li
    }
}
</script>

运行结果: 

 

 beforeUpdate()函数里数组第四个不存在,说明只要数据更新 beforeUpdate()就会运行,但虚拟DOM重新渲染是在beforeUpdate()之后完成的.

4.销毁

1.当$destroy()被调用 – 比如组件DOM被移除(例v-if)

2.beforeDestroy – 生命周期钩子函数被执行

3.拆卸数据监视器、子组件和事件侦听器

4.实例销毁后, 最后触发一个钩子函数

5.destroyed – 生命周期钩子函数被执行

(销毁后借助Vue开发者工具看不到任何信息)

小提一下vue3.0生命周期钩子函数
  • setup 创建实例前

  • onBeforeMount 挂载DOM前

  • onMounted 挂载DOM后

  • onBeforeUpdate 更新组件前

  • onUpdated 更新组件后

  • onBeforeUnmount 卸载销毁前

  • onUnmounted 卸载销毁后

2.路由

1.什么是路由

在Vue.js中,路由(Router)是用于管理应用程序的页面导航的机制。它允许您在应用程序中定义不同的路由路径,以便在用户导航时加载相应的视图组件,实现单页应用(Single-Page Application)的效果。

Vue.js使用Vue Router库来实现路由功能。通过Vue Router,您可以定义路由规则,将URL路径映射到不同的组件,并在页面切换时动态地加载和卸载组件。

实际是路由是通过切换组件来实现页面的切换

2.具体实现

  1. 在终端输入如下命令安装路由

npm install vue-router

npm i vue-router@3
yarn add vue-router@3

     2.main.js中导入路由,main.js使用路由插件

import VueRouter from 'vue-router'

Vue.use(VueRouter)

    3.在router/index.js里面导入router依赖

import {createRouter,createWebHashHistory} from 'vue-router'

     4.在router/index.js导入你的组件

例如

import Login from "../components/login.vue"
import Register from "../components/register.vue"
import Son1 from "../son/find/son1.vue"
import Son2 from "../son/find/son2.vue"

5.  router/index.js 创建路由规则数组(router/index.js是自己创建在src下的)

// 路由规则配置
const routes = [
  {
    path: '/find',        //默认hash值路径
    name: 'Find',     //重定向到/find
    component: Find  // 浏览器url中#后的路径被改变成/find-重新匹配数组规则
  },
  {
    path: '/my',    //路由路径
    name: 'My',     //路由名称
    component: My   //路由对应的组件名称
  },
  {
    path: '/friend',
    name: 'Friend',
    //路由级代码拆分
    //这将为此路由生成一个单独的块(Friend.[hash].js)
    //其在访问路由时被延迟加载。
    component: () => import('../views/Friend.vue')
  }
]

6.创建路由对象, 以及返回对象

const router = createRouter({
  history: createWebHashHistory(),
  routes
})   =>创建路由对象

export default router  返回对象

7. 载main.js导入路由

 import router from '../src/router/index.js'
 app.use(router)

 8.最后在app.vue

  <!-- 路由导航跳转, -->
    <nav class="footer_wrap">
      <router-link to="/find">发现音乐</router-link>
      <router-link to="/my">我的音乐</router-link>
      <router-link to="/friend">关注</router-link>
    </nav>
    <!-- 路由显示 -->
    <router-view class="top" />

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值