【无标题】

vue的生命周期钩子分为四大阶段,8个方法

  • 初始化

  • 挂载

  • 更新

  • 销毁

执行顺序钩子函数执行时机
1beforeCreate(){}vue实例创建了,但是el和data还没有创建 (准备创建data) 底层(初始化vue实例,初始化钩子函数,初始化一些事件和侦听器配置项)
2created() {}data数据创建了,但是el挂载点还没有创建 (准备创建el) 底层:初始化data中的数据和methods中的方法
3beforeMount() {}el挂载点创建了,但是data数据还没有渲染(准备渲染中) 底层:创建el挂载点,并且生成虚拟DOM
4mounted() {}data数据 第一次 渲染完毕 (完成初始渲染) 底层:将虚拟dom渲染成真实DOM
5beforeUpdate() {}检测到data数据变化,但是还没有开始重新渲染 (data变了,准备重新渲染中) 会执行多次
6updated() {}变化后的data数据 ,完成渲染到页面 (完成重新渲染)会执行多次
7beforeDestroy() {}vue实例销毁即将销毁(解除data与el的关联),之后修改data,页面不会被渲染 底层 : 解除 事件绑定、侦听器、组件
8destroyed() {}vue实例已经销毁

 

 

<template>
  <div>
    <button @click=" name='李四' ">点我改名字</button>
    <button @click="$destroy()">点我销毁</button>
    <p>{{ name }}</p>
    <p>{{ age }}</p>
  </div>
</template>

<script>
/* 

1. vue生命周期钩子 : vue从初始化到销毁的过程中会执行的函数

2. 四个阶段8个钩子 : 8个 
  (1)初始化阶段:  beforeCreate、 created
  (2)挂载阶段 : beforeMount、mounted
  (3)更新阶段 : beforeUpdate、updated
  (4)销毁阶段:  beforeDestroy、destroyed

3. vue初始渲染会执行哪些钩子 : 4个
  beforeCreate`    
  created
  beforeMount
  mounted

4. 两个常用
    created() :  一般用于发送ajax(页面一加载需要发送ajax在这个勾子)
    mounted() :  一般用于操作DOM(页面一加载需要操作DOM在这个勾子)

5. 有两个钩子会执行多次,其他钩子都是执行一次
    beforeUpdate、
    updated
*/
export default {
  data() {
    return {
      name: "张三",
      age: 20
    };
  },
  methods: {
    doClick() {
      console.log(1111);
    }
  },
  /* 生命周期钩子 */
  // 1. beforeCreate() :  创建了vue实例,但是还没有创建data
  beforeCreate() {
    console.log(1);
    console.log(this);
    console.log(this.name);
  },
  // 2.created() : 创建了data,但是还没有挂载
  /* 常用: 最早可以获取data的钩子, 一般在这个钩子发送ajax */
  created() {
    console.log(2);
    console.log(this);
    console.log(this.$el);
    console.log(this.name);
  },
  // 3.beforeMount() : 创建挂载点,但是还没有把data挂载到el
  beforeMount() {
    console.log(3);
    console.log(this);
    // html环境,这个钩子$el可以获取挂载点。  脚手架环境, 这个钩子$el获取的是undefined
    console.log(this.$el);
    const p = document.querySelector("p");
    console.log(p); //null 没有渲染,所以无法获取dom
  },
  // 4.mounted() : 完成初始渲染。 把data数据渲染到挂载点el
  /* 常用: 最早可以操作DOM的钩子 */
  mounted() {
    console.log(4);
    console.log(this);
    console.log(this.$el);
    const p = document.querySelector("p");
    console.log(p); // p标签 完成渲染
  },
  // 5.beforeUpdate() : 检测到data数据发生变化,但是还没有更新el
  beforeUpdate() {
    console.log(5);
    console.log(this);// 获取的是变化后的数据, 但是页面还是显示之前的数据
  },
  // 6.updated(): 更新之后的data,完成渲染
  updated() {
    console.log(6);
    console.log(this);
  },
  // 7.beforeDestroy(): 正在销毁(接触data与el绑定、移除事件监听、移除侦听器)
  /*触发销毁钩子的两个条件 
  (1)对组件使用v-if
  (2)调用组件的 this.$destroy() 
  */
  beforeDestroy() {
    console.log(7);
    console.log(this);
  },
  //8.destroyed(): 完成销毁
  destroyed() {
    console.log(8);
    console.log(this);
  }
};
</script>

<style>
</style>

路由概念及工作原理介绍

1.路由概念

  • 1.路由是什么?

    • URL 与 页面 之间的对应规则(如下图所示)

      • /home 对应 首页

      • /comment 对应 评论列表页

      • /search 对应 搜索列表页

    • 路由中的url : 主要指url的hash值

      路由中的页面:主要指vue的组件(在vue中 页面 和 盒子 都是 组件)

  • 2.为什么要学习vue中的路由

    • vue是一个渐进式框架,一个网页由很多个页面组成,那我页面之间如何跳转呢?

      • 在vue中,页面跳转主要由 路由 来实现

 

2.路由工作原理

  • 1.路由的工作原理 : 监听网页hash值变化

    • (1)修改网页的hash值

      • hash值原本的作用是来做锚点定位的,它有一个特点就是页面不会跳转

    • (2)给window注册onhashchange事件,监听hash值变化

      • 当页面hash变化时,就会执行这个事件处理函数,然后就可以根据不同hash值加载不同页面

      • 单页面应用SPA介绍

      • SPA(singal page application): 单页面应用:,所有功能在一个页面上实现

      • 经典单页面应用案例:网易云音乐

      • 对比部分单页应用多页面应用
        组成一个html文件多个组件组成多个html文件
        静态资源共用共用,一次性加载完毕不共用,每个页面都加载一遍
        刷新方式页面局部刷新整页加载
        url模式itcast.com/#/pageoneitcast.com/pageone.html
        用户体验用户体验良好页面切换加载缓慢体验较差
        数据传递容易依赖url传参,cookie,localStorage
        搜索引擎优化不利于seo优化,需要ssr优化(服务端渲染)支持良好
        使用场景追求高体验 不要求seo高度要求seo
        开发成本较高 需要依赖专业的框架, 开发效率高较低 重复代码多, 开发效率低
      • 单页面-多页面对比

vue路由使用流程(手动)

目标:从0开始搭建网易云页面路由效果

vue是一个渐进式框架,自己的功能主要是数据驱动。vue本身不提供路由功能,而是由vue团队提供的Vue Router插件完成,因此Vue Router也称之为vue全家桶中的一员

Vue Router3官网(好入门):起步 | Vue Router

Vue Router4官网(入门之后和3基本没区别):入门 | Vue Router

 

  • 路由完整配置六个流程

    • 0.下载与导入vue-router
    • 1.导入组件
    • 2.创建routes路由规则(路径和页面一一对应)
    • 3.创建路由对象
    • 4.把路由对象挂载到App.vue
    • 5.在页面写路由导航router-link (生成a标签)
    • 6.在页面写路由出口router-view (生成占位盒子,用于显示页面内容)

路由模式

 

- - 

```javascript
const router = new VueRouter({
  mode: 'hash',
  base: process.env.BASE_URL,
  routes
})
```

路由重定向

  • 路由重定向官方文档:重定向和别名 | Vue Router

    • 重定向应用场景: 页面输入根路径/ , 自动跳转到首页

    • 注意点 : 重定向只是修改路径, 还需要单独去设置路由匹配规则

const routes = [
  {
    path: '/',
    /* 
    (1)重定向只是修改页面路径。  输入 / 会重定向到 /find
    (2)只有component才会让vue去寻找路由匹配页面。所以设置了重定向,还需要单独设置匹配规则
    */
    redirect: "/find"
  },
  {
    path: '/find',
    name: 'find',
    component: find
  },
]

路由声明式导航

  • 路由声明式导航作用: 使用a标签跳转页面,并且给页面传参

    • 相当于我们之前学习过的页面跳转传参 : location.href = "/路径?参数名=参数值"

跳转方法传参位置路由规则接收
<router-link to="/path?参数名=参数值"></router-link>/path?key=value无特殊$route.query.key
<router-link to="/path/参数值"></router-link>/path/参数值/path/:key$route.params.key

查询参数两个流程

  • 1.传递参数: <router-link to="/friend?参数名=参数值">朋友</router-link>

    • <router-link to="/friend?name=张三&age=20">朋友</router-link>
  • 2.跳转后的组件接收参数: this.$route.query.参数名

    • <li>这是当前页面 query 接收到的参数: 
          <span>姓名:{{ $route.query.name }}</span>  --
          <span>年龄:{{ $route.query.age }}</span>  
      </li>

路径参数三个流程

  • 1.定义路由规则: path: '/friend/:参数名'

    • // 两个都要写哟,否则只能params传参,无法query传参
      {
          path: '/friend',
          name: 'friend',
          component: friend
      },
      {
          path: '/friend/:name/:age',
          name: 'friend',
          component: friend
      },

  • 2.传递参数: <router-link to="/friend/参数值">朋友</router-link>

    • <router-link to="/friend/李四/30">朋友</router-link>

  • 3.跳转后的组件接收参数: this.$route.params.参数名

    • <li>这是当前页面 params 接收到的参数: 
          <span>姓名:{{ $route.params.name }}</span> -- 
          <span>年龄:{{ $route.params.age }}</span>  
      </li>

 

 

vue路由的编程式导航

跳转方法传参位置路由规则接收
this.$router.push('/path')无参数无特殊不需要接收
this.$router.push({path: "/path", query: {key: value}})query的对象无特殊$route.query.key
this.$router.push({name: "com", params: {key: value})params的对象路由规则需要name属性$route.params.key

  • 编程式导航官方文档:编程式导航 | Vue Router

  • 编程式导航介绍

    • 1.作用 : 使用js代码是做路由跳转 (替代router-link)

    • 2.语法 :

      • $router.push('/路径')

      • $router.push({name:'组件name'})

    • 3.应用场景:如果希望满足条件才跳转,就可以使用编程式导航

      • router-link :相当于a标签,只要点击就会跳转,没有逻辑

      • $router.push('路径'):相当于window.location.href,使用js来做业务逻辑

query传参两个步骤

  • 1.跳转传参

    • this.$router.push({ path: '/路由地址', query: { 参数名: '参数值' }})
  • 2.跳转后的组件接收参数: this.$route.query.参数名

    • <li>这是当前页面 query 接收到的参数: 
          <span>姓名:{{ $route.query.name }}</span>  --
          <span>年龄:{{ $route.query.age }}</span>  
      </li>

params传参三个步骤

有一个细节千万不要搞混淆,在编程式导航的时候。

如果你要是用query传参, 那么就要使用 path 来跳转

如果你要是用params传参, 那么就要使用 name 来跳转

  • 1.路由规则添加路由名

    • { path: '/friend', name: 'friend', component: friend },
  • 2.跳转传参

    • this.$router.push({ name: '路由名', params: { 参数名: '参数值' }})
  • 3.跳转后的组件接收参数: this.$route.params.参数名

    • <li>这是当前页面 params 接收到的参数: 
          <span>姓名:{{ $route.params.name }}</span> -- 
          <span>年龄:{{ $route.params.age }}</span>  
      </li>

query参数和params参数区别

  • 1.query: 是通过地址栏传参, 参数会在地址栏显示,刷新还在

  • 2.params:是通过内存传参,参数不会在地址栏显示,刷新会消失

 

二级路由(嵌套路由)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值