【Vue】Vue基础自用笔记&Day03_①Vue生命周期②Vue网络请求③Vue动画

2023-11-19

1. Vue生命周期

在这里插入图片描述

官方图示
如图所示,总共有八个生命周期函数:
	1. beforeCreate()
	2. created()
	3. beforeMount()
	4. mounted()
	5. beforeUpdate()
	6. updated()
	7. beforeDestroy()
	8. destroyed()

beforeCreate生命周期钩子函数:
初始化尚未完成,data数据,methods方法都未挂在在vue实例上
一般用于页面重定向

      beforeCreate() {
        console.log('一般用于页面重定向');
        console.log(this.msg);
        console.log("这个undefined是因为,初始化还没完成呢");
      },

created生命周期钩子函数:
初始化已经完成,data数据,methods方法都可以被调用了
是第一个能操作data中数据对象和调用methods方法的生命周期, 一般用于接口请求+数据初始化

   methods: {
      getClassification() {
        axios.post(this.baseUrl + "/weChat/applet/subject/list", { enable: 1 }).then(res => {
          this.classificationList = res.data.rows
        })
        ......
       }
   created() {
      this.getClassification()
      this.getSwiper()
      this.getCourses().then(res => { this.freeCourseList = res.data.rows })
      this.getCourses('boutique', 1, 5).then(res => { this.boutiqueCourseList = res.data.rows })
      this.getCourses('discount', 1, 5).then(res => { this.discountCourseList = res.data.rows })
      this.getFooterHref()
    }

beforeMount生命周期钩子函数:
进入运行阶段前;此时虚拟dom尚未挂载,页面元素尚未更新

beforeMount() {
    console.log("虚拟dom挂载前,此时页面元素尚未更新");
  }

mounted生命周期钩子函数:
dom元素挂载后,如果需要操作dom,可以在此mounted周期执行

mounted() {
  console.log("dom元素挂载后,如果需要操作dom,可以在此mounted周期执行");
},

beforeUpdate生命周期钩子函数:
元素发生更新时,元素更新前的阶段;可以执行0次到多次;

beforeUpdate() {
  console.log("元素一更新我就打印,但我是更新前就打印了");
}

updated生命周期钩子函数:
元素发生更新时,元素更新完成的阶段;同样可以执行0次到多次;

updated() {
  console.log("元素一更新我就打印,但我是更新后才打印");
}

beforeDestroy生命周期钩子函数:
vue销毁前的阶段,一般用来清除定时器、函数等操作。

beforeDestroy() {
  console.log("销毁前清除占内存的操作");
}

destroyed生命周期钩子函数:
vue销毁后的阶段,好像没什么用。


this.$nextTick()方法

this.$nextTick()解释为在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的DOM。 也就是说,当dom元素发生改变,重新渲染dom树后,再执行vue.$nextTick()里面的内容。

它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。
为了不影响this指向,参数一般为箭头函数。

举例:在DOM加载完成后,进行Swiper轮播图初始化,避免异步影响

this.$nextTick(() => {
  // swiper轮播图
  var mySwiper = new Swiper('.swiper', {
    direction: 'horizontal', // 垂直切换选项
    loop: true, // 循环模式选项
    // 如果需要分页器
    pagination: {
      el: '.swiper-pagination'
    },
    // 如果需要前进后退按钮
    navigation: {
      nextEl: '.swiper-button-next',
      prevEl: '.swiper-button-prev',
    },
    speed: 800,
    autoplay: true, //自动切换
    autoplay: {
      delay: 1500, //自动切换的时间间隔,单位ms
      disableOnInteraction: false //用户操作swiper之后,是否禁止autoplay
    },
    spaceBetween: 0
  })
})

2. Vue网络请求

①vue-resource

1.X.X 版本使用:vue-resource,它依赖于Vue.js,需要注意引入顺序,必须引入在vue.js后,
现在已几乎弃用,基本只有在维护老版本应用时会用到。

vue-resource 发送GET请求:
this.$http.get()

this.$http.get(this.baseUrl + "/weChat/applet/course/banner/list?number=4").then(res => {
  console.log(res);
  this.imgSrcList = res.body.data
})

vue-resource 发送POST请求:
this.$http.post()
默认请求参数类型为 application/json,它有第三个参数:{ emulateJSON: true }
用来设置post提交的参数编码类型为 application/x-www-form-urlencoded

this.$http.post(this.baseUrl + "/weChat/applet/course/list/type",
  { type: "free", pageNum: 1, pageSize: 10 }, { emulateJSON: true }).then(res => {
    console.log(res);
    this.coursesList = res.body.rows
  })

 

②Axios

Vue.js 2.0 版本推荐使用 axios 来完成 ajax 请求
Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。

Axios的引入不需要放在vue.js后,它和vue-resource的返回值相同,都是一个Promise对象

 
axios 发送GET请求:

axios.get(this.baseUrl + "/weChat/applet/course/banner/list?number=4").then(res => {
  console.log(res);
  this.imgSrcList = res.data.data
})

axios 发送POST请求:
axios有许多参数,如果需要指定post请求的参数类型为application/x-www-form-urlencoded的话,需要这么做:

 let formUrl = new URLSearchParams()
 formUrl.append("type", "free")
 formUrl.append("pageNum", 1)
 formUrl.append("pageSize", 10)

然后直接将创建的对象写在请求地址后即可:

 axios.post(this.baseUrl + "/weChat/applet/course/list/type", formUrl).then(res => {
   console.log(res);
   this.coursesList = res.data.rows
 })

3.Vue动画

①使用CSS创建动画

1.使用 transition 标签将需要过渡的元素包裹起来
<transition>
  <div class="box" v-show="flag">{{msg}}</div>
</transition>
<transition name="v2">
  <div class="box" v-show="flag">{{msg}}</div>
</transition>
2.使用类名过渡时,需要设置的类名有六个:
	v-enter、v-enter-to、v-enter-active
	v-leave、v-leave-to、v-leave-active
	
有多个transition标签时,需要指定name属性。

name 属性用于自动生成 CSS 动画类名

如果 transition 标签元素没有设置 name 属性,则对应的动画类名为 v-XXX ( v-enter等 )

如果设置了 name 属性,则对应的动画类名为 属性值-XXX ( 属性值-enter等 )

当存在多个 tansition 标签时,我们可以通过 name 属性给各个 transition 标签指定不同的 CSS 动画效果

.box {
 width: 150px;
 height: 30px;
 margin: 0 auto;
 background-color: rgb(255, 213, 0);
 color: rgb(0, 134, 87);
}

.v-enter,
.v2-leave-to {
 transform: translateX(-200px);
}

.v-enter-to,
.v-leave,
.v2-enter-to,
.v2-leave {
 transform: translateX(0px);
}

.v-enter-active,
.v-leave-active {
 transition: all 2s;
}

.v2-enter,
.v-leave-to {
 transform: translateX(200px);
}

.v2-enter-active,
.v2-leave-active {
 transition: all 2s;
}
3. 创建Vue实例,实现动画效果切换
const vm = new Vue({
  el: '#app',
  data: {
    flag: true,
    msg: '这动画老记不住啊'
  },
  methods: {},
})

或者使用第三方动画库:animate.css

引入动画类库后直接使用它的类名即可。


②使用JS创建动画

定义 transition 组件以及三个钩子函数:

<div id="app">
  <input type="button" value="切换动画" @click="isshow = !isshow">
  <transition
  @before-enter="beforeEnter"
  @enter="enter"
  @after-enter="afterEnter">
    <div v-if="isshow" class="show">OK</div>
  </transition>
</div>

定义三个 methods 钩子方法:

methods: {
   beforeEnter(el) { // 动画进入之前的回调
     el.style.transform = 'translateX(500px)';
   },
   enter(el, done) { // 动画进入完成时候的回调
     el.offsetWidth;
     el.style.transform = 'translateX(0px)';
     done();
   },
   afterEnter(el) { // 动画进入完成之后的回调
     this.isshow = !this.isshow;
   }
}

定义动画过渡时长和样式:

.show{
	transition: all 0.4s ease;
}

目前来看舍近求远,一般不建议使用。


③使用v-for创建一个过渡列表

定义过渡样式:

<style>
  .list-enter,
  .list-leave-to {
    opacity: 0;
    transform: translateY(10px);
  }
​
  .list-enter-active,
  .list-leave-active {
    transition: all 0.3s ease;
  }
</style>

定义DOM结构,其中,需要使用 transition-group 组件把v-for循环的列表包裹起来:

<div id="app">
  <input type="text" v-model="txt" @keyup.enter="add">
  <transition-group tag="ul" name="list">
    <li v-for="(item, i) in list" :key="i">{{item}}</li>
  </transition-group>
</div>

定义 VM 中的结构:

// 创建 Vue 实例,得到 ViewModel
 var vm = new Vue({
   el: '#app',
   data: {
     txt: '',
     list: [1, 2, 3, 4]
   },
   methods: {
     add() {
       this.list.push(this.txt);
       this.txt = '';
     }
   }
 });

<transition-group> 组件还有一个特殊之处。不仅可以进入和离开动画,还可以改变定位。要使用这个新功能只需了解新增的 v-move 特性,它会在元素的改变定位的过程中应用。

v-move 和 v-leave-active 结合使用,能够让列表的过渡更加平缓柔和:

v-move{
transition: all 0.8s ease;
}
.v-leave-active{
position: absolute;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Vue】Vue基础自用笔记&Day03_①Vue生命周期②Vue网络请求③Vue动画 的相关文章

  • 在使用 jQuery 拖动时向元素添加 CSS 类

    是否可以在元素被拖动到特定区域时向其添加 CSS 类 并在元素被删除后替换该类 我并不是到处寻找这个功能 而是只在特定区域寻找这个功能 是的 这当然有可能 jQuery UI 提供了一些方便的选项和事件来执行此操作 对于初学者来说 可拖动元
  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • 少吞咽然后缩小任务

    我必须在 gulp 中执行 2 个步骤 减少 css 文件格式 缩小生成的 css 文件 这是我的吞咽文件 var gulp require gulp watch require gulp watch less require gulp l
  • Exceljs:迭代每行和每列的每个单元格

    我想在所有单元格中添加粗边框 这是一个有角度的项目 我正在使用打字稿 我可以为 1 个单元格做到这一点 worksheet getCell A1 border top style thick left style thick bottom
  • 如何使用jquery格式化数字

    我正在尝试删除 之后的数字 然后我想格式化数字 16810900 211233 喜欢这个 16 810 900 但我不知道该怎么做 这是我的 html 是这样的 div class main p class active 10200 00
  • 整个页面都是玻璃板

    有没有一种简单的方法可以在整个 HTML 页面上拥有一个 玻璃窗格 而不管缩放 幻灯片事件 平台 浏览器 移动 桌面 我所说的 简单 是指纯 CSS 支持 而不是插件 后备 插件建议也可能有用 Thanks 如果您只是指所有内容之上的一层
  • 如果Functions是javascript中的对象,为什么function.constructor指向Function而不是Object?

    当像这样从窗口对象创建以下函数时 function userInfo 既然函数是对象 为什么 userInfo constructor 显示 Function 而不是 Object 当使用以下内容时 它甚至显示函数而不是对象 Functio
  • 如何在Javascript中声明静态变量[重复]

    这个问题在这里已经有答案了 在下面的代码中 我希望有一个计数器来跟踪创建的 Person 对象的数量 这段代码没有这样做 我该如何实现呢 function Person this name Peter this counter this c
  • 每次页面重新启动时,Firebase.auth().currentUser 都会变为 null

    我正在使用 firebase 身份验证与 vue 应用程序 每次登录用户后重新启动页面时 currentUser 都会变为 null firebase auth signInWithEmailAndPassword this email t
  • 将其作为参数传递给 addEventListener()

    我想添加change一组复选框的事件 我如何访问this在我的事件函数中 这样当我执行事件时我可以访问复选框的值 这是我当前的代码 var checkboxes document getElementsByClassName cb Arra
  • 尝试使用 CasperJS 跟踪 iframe 中的链接

    我正在尝试使用CasperJS http casperjs org index html跟踪 iframe 中的链接 但我似乎无法获取 iframe 的文档 这是使用我找到的 iframe 示例页面进行的测试 第三个 iframe 有一个名
  • Javascript“命名空间”和 jQuery AJAX

    我正在使用此处列出的建议 http www odetocode com articles 473 aspx http www odetocode com articles 473 aspx 使用模拟的JavaScript AJAX网络聊天系
  • 如何从Web JavaScript应用程序获取桌面C#程序中的变量

    我遇到一个问题 有两个应用程序 一种是 C 中的桌面应用程序 另一种是 javascript 中的 Web 应用程序 运行桌面应用程序中的一些变量或信息需要传输到Web应用程序 有谁知道如何解决这个问题 有人愿意提供更多细节来解决这个问题吗
  • 如何使用 JavaScript 播放任意 MIDI 音符?

    澄清一下 我不想生成 MIDI 文件 也不想播放 MIDI 文件 我希望即时播放 MIDI 音符 我尝试使用https github com mudcube MIDI js https github com mudcube MIDI js作
  • 根据数据更改图例颜色高图表

    我可以根据数据动态设置列的颜色 但无法弄清楚如何更改图例中的颜色 请注意 jsfiddle 最新的条形图是绿色的 但图例是蓝色的 有没有办法改变列颜色也会改变图例颜色 这是我用于列颜色的代码 jsfiddle http jsfiddle n
  • 按钮导致页面重新加载

    我在我的页面上使用 html 和 jquery 在我的 html 中 我有一个按钮 单击该按钮将触发一个功能 当页面加载时 我调用文档准备中的主函数 这是我的代码 div div
  • Firefox 和 Chrome 为 offsetTop 提供了不同的值

    我试图相对于输入字段定位一个跨度元素 让我们称之为 工具提示跨度 为此 我将工具提示跨度和输入字段包装在另一个跨度元素中 我们称之为 包装器跨度 该元素具有position relative 然后我设置position absolute在工
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • 在 Map() 的条目上使用 Promise.all

    我正在使用 Map 来表示一些键 值对 let myMap new Map myMap set foo bar myMap set foo2 bar42 对于每个 Map 条目 我执行一个返回 Promise 的函数 所有这些 Promis
  • 保留对 React 状态变量的“引用”

    据我所知 Javascript 中没有指针 我有以下问题 但我想知道是否有一个解决方案让我无法解决 解决方案可能是普通的 Javascript 或者像 Context API 这样的 React js 钩子 useContext 或者更多

随机推荐

  • Java 读取resources下的资源文件

    Web项目中应该经常有这样的需求 在maven项目的resources目录下放一些文件 比如一些配置文件 资源文件等 文件的读取方式有好几种方式 本文会对常用的读取方式做一个总结 并说明一下应该注意的地方 准备工作 新建一个spring t
  • 无向图染色问题-dfs剪枝

    无向图染色问题 问题描述 给定一个无向图 要求用最少的颜色将节点染色 限制是不能让相邻节点染上相同的颜色 算法 使用dfs 为节点分配不同的颜色进行尝试 计算每种分配所需的颜色数 最终进行回溯 取得最小的颜色数 代码 C include
  • OpenAI最新发布通用人工智能路线图!AGI比想象中来得更快!

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt 计算机视觉 微信技术交流群 转载自 机器之心 编辑 泽南 小舟 通用人工智能的出现可能只是技术发展历程中的一个小节点 因为 AGI 或许可以加速自身的进
  • 点云/网格模型的体积计算

    点云体积计算 有时用激光扫描设备扫描零件或者用无人机进行测量后会想知道它们的体积 比如下面的土堆 如果扫描得到的数据是一系列三维点云 那么体积就比较难求 因为如何定义物体的边界比较困难 一种方法是提取三维点云的凸壳 包络体 然后再进行计算
  • 第五章 数据清洗

    5 1数据去重 5 1 1完全去重 点击 获取字段 配置csv文件输入的属性 Name Gender City 配置唯一行属性 选择要去重的属性 Name Gender City 运行结果 完全去重成功 5 1 2不完全去重 将文本分隔符替
  • 支付宝短视频平台创作分成激励项目

    没想到支付宝也开通了中视频计划 这波羊毛算是蒿定了 最近啊 马爸爸火速上线了支付宝创作分成计划 明显就是抄的抖音中视频计划 目前还在内测阶段 补贴的力度非常大 错过的话就只能拍大腿了 看到短视频这么的火爆 巨头大佬们都想分一杯羹啊 阿里也不
  • Linux下MySQL启动、停止、重启的几种方式

    一 启动 1 使用service 启动 service mysqld start 2 使用 mysqld 脚本启动 etc inint d mysqld start 3 使用 safe mysqld 启动 safe mysqld 二 停止
  • 互联网产品上线流程,及面试题分类

    一 基础情况 问题1 自我介绍 3mins 与自我介绍 1min 问题2 为什么你要来这个行业 问题3 为什么你要来这个岗位 问题4 为什么你能胜任这份工作 问题5 为什么你要离职 问题6 过往经历STAR故事描述 问题7 你的职业规划是什
  • php mes代码,完整MES代码(含客户端和server端)

    实例简介 完整的代码 带数据库文件 包含客户端 服务端 实例截图 核心代码 MES 源代码 MES 源代码 MES 源代码 dll AjaxControlToolkit dll AspNetServer dll AxInterop CELL
  • el-form 校验单个字段

    单个校验 核心为 validateField 而非validate
  • 关于编译器生成默认构造函数的理解

    构造函数 构造函数是创建类类型对象时 由编译器自动调用 用来初始化对象的函数 它保证每个数据成员都有一个合适的初始值 并且在对象的生命周期内只调用一次 函数名与类名相同 无返回值 构造函数可以重载 什么是默认构造函数 无参的构造函数 全缺省
  • JAVA中的while do-while循环以及for循环的深刻理解 入门 小白必看

    循环 循环 循环 循环的作用 提出问题为什么需要循环 解决问题循环的出现 while 前序 循环 while循环的语法与流程以及细节 do while 后序循环 do while循环的语法和流程 while和do while 之间的区别 f
  • 人工智能顶会顶刊以及SCI,IF,核心,分区

    人工智能顶会顶刊以及SCI IF 核心 分区 标签 常识 刚上研究生的时候 老师总会让大家看论文 并且还要求要看好文章 要看顶会或者顶刊上面的文章 但是刚开始就不知道什么是顶会或者顶刊 所以这里整理了一下在人工智能方面的顶刊或者顶会 比如c
  • HacksudoAliens

    HacksudoAliens arp scan interface eth0 192 168 1 0 24 nmap sC sV p sT 192 168 1 251 sS sT sA sW sM TCP SYN Connect ACK W
  • Java自动生成bean、dao、service、impl、controller(JPA初版)

    关自动生成代码我是这么想的 初步 目录 一 拿到所有表名 列名 列类型数据 C3P0连接数据库并获取所需数据 所需数据对象 测试拿到的数据 结果 二 用FreeMarker模板生成对应JPA架构Java文件 编写模板 bean ftl be
  • C语言实验——打印金字塔

    Problem Description 输入n值 打印下列形状的金字塔 其中n代表金字塔的层数 Input 输入只有一个正整数n Output 打印金字塔图形 其中每个数字之间有一个空格 Sample Input 3 Sample Outp
  • 美创科技发布“韧性”数据安全防护体系框架

    4月13日 美创科技数据安全产品架构升级发布会顺利举办 会上 美创重磅发布 韧性 数据安全防护体系框架 全新数据安全框架 以 资产 为中心 由内而外 以 看见 基石 旨在通过构建 弹性和韧性 可见性 适应性进化 的数据安全防护能力 帮助用户
  • Python打印输出数组中全部元素的方法

    学习Python的人都知道数组是最常用的的数据类型 为了保证程序的正确性 需要调试程序 因此 需要在程序中控制台中打印数组的全部元素 如果数组的容量较小 例如 只含有10个元素 采用print命令或print函数可以答应出数组中的每个元素
  • 记一次挖矿病毒应急处置全过程&挖矿处置基本操作

    记一次挖矿病毒应急处置全过程 挖矿处置基本操作 一 处置过程 1 查看第一位的pid号 32535 2 进入 tmp X11 unix 目录 其中 11 文件中写的是32535 01 文件中写的是守护进程pid号10092 目录里的文件不一
  • 【Vue】Vue基础自用笔记&Day03_①Vue生命周期②Vue网络请求③Vue动画

    Vue基础 Day03 1 Vue生命周期 this nextTick 方法 2 Vue网络请求 vue resource Axios 3 Vue动画 使用CSS创建动画 或者使用第三方动画库 animate css 使用JS创建动画 使用