一套用于构建用户界面的渐进式框架
基于数据动态渲染页面
1.搭建Vue开发环境
官网文档找
部分构建vue

2.Hello小案例(vue3)
el:指定挂载点 配置选择器,指定vue管理的哪个盒子
data:提供数据
vue具有响应式特性
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<h1>{{msg}}</h1>
</div>
<!-- 引入vue模块 -->
<script type="module">
import {createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
createApp({
data(){
return{
//定义数据
msg:'hello vue'
}
}
}).mount("#app")
</script>
</body>
</html>
Vue指令
指带有v-前缀的特殊标签属性
v-html:设置内部的innerhtml 修改页面结构和内容
v-show:切换css的display:none来控制显示隐藏(简单的隐藏控制)
v-if:根据判断条件控制元素的创建和移除(条件渲染)

v-on

函数里调用自身参数:this.money
v---bind

v-bind使用值,下面的data中也需要提供

v-for
v-for="(item,index) in 数组" item每一项,index下标
中的key属性 :key="唯一标识" 需要给元素加上唯一标识,便于vue进行列表项的正确排序复用

v-bind



3.模板语法(vue3)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>初识Vue</title>
<!-- 引入Vue -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="app">
<h1>Hello,{{name}}</h1>
<hr>
<h1>指令语法</h1>
<a v-bind:href="url">点我去百度</a>
</div>
<script>
const { createApp } = Vue
const x=createApp({
data() {
return {
name: 'liuben',
url:"http://www.baidu.com"
}
}
})
x.mount('#app')
</script>
</body>
</html>
1.插值语法
{{xxx}} 用于解析标签体内容 xxx为js表达式

2.指令语法
v-bind:href="xxx"(可简写成:href="xxx") 用于解析标签 xxx为js表达式
4.数据绑定
v-model
只能应用在表单类元素(输入类元素) 双向数据绑定->可以快速获取或设置表单元素内容
1.数据变化->视图自动更新 2.视图变化->数据自动更新
v-model:value可以简写为v-model,因为v-model就是收集value值

单向绑定只有红(只能从data流向页面),双向绑定红粉
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数据绑定</title>
<!-- 引入Vue -->
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<div id="root">
单向数据绑定:<input type="text" v-bind:value="name"><br>
双向数据绑定:<input type="text" v-model:value="name">
</div>
<script>
new Vue({
el:'#root',
data:{
name:'liuben'
}
})
</script>
</body>
</html>
v-model绑定后自动选取
指令修饰符

5.计算属性
基于现有的数据,计算出来的新属性。依赖的数据变化,自动重新计算

使用计算属性不用加(),它是属性不是函数

computed计算属性 vs methods方法


6.watch侦听器(监视器)
监视数据变化,执行一些业务逻辑和异步操作
1.简单写法->简单类型数据,直接监听

防抖:延迟执行->干啥事先等一会,延迟一会,过一段时间再执行

2.完整写法->添加额外配置项
deep:true 对复杂类型深度监视(对所有属性监视)
immediate:true 初始化立刻执行一次handler方法
7.生命周期
创建 挂载 更新 销毁

Vue生命周期函数(钩子函数)
Vue生命周期过程中,会自动运行一些函数,被称为生命周期钩子->让开发者可以在特定阶段运行自己的代码


get结果传参

8.工程化开发和脚手架
工程化开发模式:基于构建工具(例如:webpack)的环境中开发vue

Vue CLI全局命令工具 帮我们快速创建一个开发Vue项目的标准化基础架子


脚手架目录文件

main.js:导入app.vue,基于app.vue创建结构渲染index.html
9.组件
组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构、样式、行为
根组件:整个应用最上层的组件,包裹所有普通小组件

app.vue三部分 template:结构 script:js逻辑 style:样式
组件注册
组件注册的两种方式:
1.局部注册:只能在注册的组件内使用
(1)在components下注册vue文件(app.vue三部分 )

(2)在使用的组件内导入并注册
import语句要卸载script标签内部
export去导出

使用:当成html标签使用 <组件名></组件名>
2.全局注册:所有组件内都能使用

scoped
默认的style样式,会作用于全局组件
加上scoped属性的style样式,只会作用于当前组件
原理:对当前组件内标签都被添加data-v-hash值的属性
data
组件的data选项必须是一个函数
保证每个组件实例都能维护自己独立的一份数据对象
组件通信
组件的数据是独立的,无法直接访问其他组件的数据
父子与非父子关系


父子通信:
1.父组件通过props将数据传递给子组件

2.子组件利用$emit通知父组件修改更新

v-model原理
本质上是一个语法糖。例如应用在数据框上,就是value属性和input事件的合写
提供数据的双向绑定:1.数据变,视图跟着变:value 2.视图变,数据跟这变:@input

此处$event用于在模板中,获取事件的形参
表单类组件封装&v-model简化代码
实现子组件与父组件的数据的双向绑定(因为不能直接用v-model)
父传子:数据应该是父组件props传递过来的,v-model拆解后去绑定数据
子传父:监听输入,子传父传值给父组件修改(因为收集来的数据要从父组件上传)


父传子

子传父

父组件v-model简化代码,实现子组件和父组件数据双向绑定
sync修饰符
可以实现子组件与父组件数据的双向绑定,简化代码
prop属性名,可以自定义,非固定value

ref和$refs
利用ref和$refs可以用于获取dom元素或组件实例
查找范围->当前组件内(更精确稳定)

querySelector 查找范围->整个页面满足的盒子,同名的不需要的盒子也搞上了


