01. Vue核心 Vue简介 初识
迪丽瓦拉
2025-06-01 04:37:06
0

1.Vue简介

1. Vue核心

1.1 官网

  • 英文官网
  • 中文官网

1.1.2 介绍与描述

  • Vue 是一套用来动态构建用户界面渐进式JavaScript框架
    构建用户界面:把数据通过某种办法变成用户界面
    渐进式:Vue可以自底向上逐层的应用,简单应用只需要一个轻量小巧的核心库,复杂应用可以引入各式各样的Vue插件
    在这里插入图片描述

1.1.3. Vue 的特点

  1. 遵循MVVM模式
  2. 编码简洁,体积小,运行效率高,适合移动/PC端开发
  3. 它本身只关注 UI,可以引入其它第三方库开发项目
  4. 采用组件化模式,提高代码复用率、且让代码更好维护

在这里插入图片描述

  • 声明式编码,让编码人员无需直接操作 DOM,提高开发效率
    在这里插入图片描述
  • 使用 虚拟DOMDiff算法,尽量复用 DOM 节点

1.1.4.与其他 JS 框架的关联

  • 借鉴 angular模板数据绑定 技术
  • 借鉴 react组件化虚拟DOM 技术

1.1.5. Vue 周边库

  • vue-cli:vue 脚手架
  • vue-resource(axios):ajax 请求
  • vue-router:路由
  • vuex:状态管理(它是 vue 的插件但是没有用 vue-xxx 的命名规则)
  • vue-lazyload:图片懒加载
  • vue-scroller:页面滑动相关
  • mint-ui:基于 vue 的 UI 组件库(移动端)
  • element-ui:基于 vue 的 UI 组件库(PC 端)

1.2. 初识 Vue

前置工作

  1. 给浏览器安装 Vue Devtools 插件
  2. 标签引入Vue包
  3. (可选)阻止vue在启动时生成生产提示 Vue.config.productionTip = false
  4. favicon 需要将页签图标放在项目根路径,重新打开就有了(shfit+F5 强制刷新)
    初识Vue
  5. 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象
  6. root 容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法
  7. root 容器里的代码被称为Vue模板
  8. Vue 实例与容器是一一对应
  9. 真实开发中只有一个Vue实例,并且会配合着组件一起使用
  10. {{xxx}}中的 xxx 要写 js 表达式,且 xxx 可以自动读取到data中的所有属性
    注意区分:js 表达式 和 js代码(语句)
    a. 表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方
    a a+b demo(1) x === y ? ‘a’ : ‘b’
    b. js代码(语句)
    if(){} for(){}
  11. 一旦 data 中的数据发生变化,那么模板中用到该数据的地方也会自动更新

hello , {{name}}

1.3 模板语法

Vue模板语法包括两大类

  1. 插值语法
    功能:用于解析标签体内容
    写法:{{xxx}},xxx 是 js 表达式,可以直接读取到 data 中的所有区域
  2. 指令语法
    功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)
    举例:或简写为,xxx 同样要写 js 表达式,可以直接读取到 data 中的所有属性
    备注:Vue中有很多的指令,且形式都是 v-xxx,此处只是拿v-bind举例
    

在这里插入图片描述

1.4. 数据绑定

Vue中有2种数据绑定的方式

  1. 单向绑定v-bind数据只能从 data 流向页面
  2. 双向绑定v-model数据不仅能从 data 流向页面,还可以从页面流向 data

备注

  1. 双向绑定一般都应用在表单类元素上,如

    阅读并接受《用户协议》

在这里插入图片描述

1.15. 过滤器 (Vue3 已经移除)

定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)
注册过滤器:

  • Vue.filter(name, callback) 全局过滤器
  • new Vue {filters: {}} 局部过滤器

使用过滤器:{{ xxx | 过滤器名}} 或 v-bind:属性 = “xxx | 过滤器名”

备注:

  1. 过滤器可以接收额外参数,多个过滤器也可以串联
  2. 并没有改变原本的数据,而是产生新的对应的数据

处理时间的库 moment 体积较大 dayjs 轻量级


显示格式化后的时间

现在是:{{ fmtTime }}

现在是:{{ getFmtTime() }}

现在是:{{time | timeFormater}}

现在是:{{time | timeFormater('YYYY_MM_DD') | mySlice}}

尚硅谷

备注:
1.过滤器也可以接收额外参数、多个过滤器也可以串联
2.并没有改变原本的数据, 是产生新的对应的数据

在这里插入图片描述

1.16. 内置指令

之前学过的指令:

  • v-bind 单向绑定解析表达式,可简写为:
  • v-model 双向数据绑定
  • v-for 遍历数组 / 对象 / 字符串
  • v-on 绑定事件监听,可简写为@
  • v-show 条件渲染 (动态控制节点是否展示)
  • v-if 条件渲染(动态控制节点是否存存在)
  • v-else-if 条件渲染(动态控制节点是否存存在)
  • v-else 条件渲染(动态控制节点是否存存在)

1.16.1. v-text 指令

v-text 指令

  • 作用:向其所在的节点中渲染文本内容
  • 与插值语法的区别:v-text 会替换掉节点中的内容,{{xxx}} 则不会,更灵活

你好,{{name}}

1.16.2. v-html 指令

v-html 指令
作用:向指定节点中渲染包含html结构的内容
与插值语法的区别:

  1. v-html 会替换掉节点中所有的内容,{{xxx}} 则不会
  2. v-html 可以识别 html 结构

严重注意 v-html 有安全性问题!!!

  1. 在网站上动态渲染任意 html 是非常危险的,容易导致 XSS 攻击
  2. 一定要在可信的内容上使用 v-html ,永远不要用在用户提交的内容上!!!

你好,{{name}}

在这里插入图片描述

1.16.3. v-cloak 指令

v-cloak 指令(没有值)

  • 本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉 v-cloak 属性
  • 使用 css 配合 v-cloak 可以解决网速慢时页面展示出 {{xxx}} 的问题


{{name}}

1.16.4. v-once 指令(用的少)

  • v-once 所在节点在初次动态渲染后,就视为静态内容了
  • 以后数据的改变不会引起 v-once 所在结构的更新,可以用于优化性能

初始化的n值是:{{ n }}

当前的n值是:{{ n }}

在这里插入图片描述

1.16.5. v-pre 指令(比较没用)

  • 跳过v-pre所在节点的编译过程
  • 可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译

Vue其实很简单

当前的n值是:{{n}}

在这里插入图片描述

1.17. 自定义指令

directives

记住这里面就是操作Dom的

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。

需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。

语法:

局部指令:

new Vue({															directives:{ 指令名:配置对象 }   
})new Vue({															directives:{ 指令名:回调函数 }   
})

全局指令:

Vue.directive(指令名, 配置对象)
或
Vue.directive(指令名, 回调函数)Vue.directive('fbind', {// 指令与元素成功绑定时(一上来)bind(element, binding) {	// element就是DOM元素,binding就是要绑定的element.value = binding.value},// 指令所在元素被插入页面时inserted(element, binding) {element.focus()},// 指令所在的模板被重新解析时(data数据改变导致模板重新解析)update(element, binding) {element.value = binding.value}
})

配置对象中常用的3个回调:

  • bind:指令与元素成功绑定时调用。
  • inserted:指令所在元素被插入页面时调用。
  • update:指令所在模板结构被重新解析时调用。

element 就是 DOM 元素,binding 就是要绑定的对象,它包含以下属性:name、value、oldValue、expression、arg、modifiers

备注
指令定义时不加v-,但使用时要加v-
指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名

new Vue({el: '#root',data: {n:1},directives: {'big-number'(element,binding) {element.innerText = binding.value * 10}}
})

定义全局指令


局部指令

自定义指令

{{ name }}

当前的n值是:

放大10倍后的n值是:


在这里插入图片描述

1.18. Vue生命周期

1.18.1 引出生命周期

生命周期

  • 又名生命周期回调函数、生命周期函数、生命周期钩子
  • 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数
  • 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的
  • 生命周期函数中的 this 指向是vm组件实例对象

你好啊

看笔记学Vue

在这里插入图片描述

1.18.2. 分析生命周期

在这里插入图片描述

分析生命周期

当前的n值是:{{ n }}

在这里插入图片描述
先判断有没有 el 这个配置项,没有就调用 vm.$mount(el),如果两个都没有就一直卡着,显示的界面就是最原始的容器的界面。有el这个配置项,就进行判断有没有template这个配置项,没有 template 就将el绑定的容器编译为 vue 模板,来个对比图。

没编译前的:
在这里插入图片描述
编译后:
在这里插入图片描述
template 的作用

第一种情况,有 template:

如果 el 绑定的容器没有任何内容,就一个空壳子,但在 Vue 实例中写了 template,就会编译解析这个 template 里的内容,生成虚拟 DOM,最后将 虚拟 DOM 转为 真实 DOM 插入页面(其实就可以理解为 template 替代了 el 绑定的容器的内容)。
在这里插入图片描述
第二种情况,没有 template:

没有 template,就编译解析 el 绑定的容器,生成虚拟 DOM,后面就顺着生命周期执行下去。

1.18.3. 总结生命周期

总结

  1. beforeCreate(创建前):数据监测(getter和setter)和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。
  2. created(创建后):实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到 DOM,所以不能访问到 $el 属性。
  3. beforeMount(挂载前):在挂载开始之前被调用,相关的render函数首次被调用。此阶段Vue开始解析模板,生成虚拟DOM存在内存中,还没有把虚拟DOM转换成真实DOM,插入页面中。所以网页不能显示解析好的内容。
  4. mounted(挂载后):在el被新创建的 vm.$el(就是真实DOM的拷贝)替换,并挂载到实例上去之后调用(将内存中的虚拟DOM转为真实DOM,真实DOM插入页面)。此时页面中呈现的是经过Vue编译的DOM,这时在这个钩子函数中对DOM的操作可以有效,但要尽量避免。一般在这个阶段进行:开启定时器,发送网络请求,订阅消息,绑定自定义事件等等
  5. beforeUpdate(更新前):响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染(数据是新的,但页面是旧的,页面和数据没保持同步)。
  6. updated(更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时 DOM 已经根据响应式数据的变化更新了。调用时,组件 DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
  7. beforeDestroy(销毁前):实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。在这个阶段一般进行关闭定时器,取消订阅消息,解绑自定义事件。
  8. destroyed(销毁后):实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。

常用的生命周期钩子

  1. mounted 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作
  2. beforeDestroy 清除定时器、解绑自定义事件、取消订阅消息等收尾工作

关于 销毁 Vue 实例

  1. 销毁后借助Vue开发者工具看不到任何信息
  2. 销毁后自定义事件会失效,但原生DOM事件依然有效
  3. 一般不会在 beforeDestroy 操作数据,因为即便操作数据,也不会再触发更新流程了

欢迎学习Vue

在这里插入图片描述

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...