学 vue3 通过官方文档更详细,不过阅读本博客,可以更容易理解,且帮你速成!
组合式
否则你学的是vue2)学习前的准备
创建一个 vue3 项目,详见链接
https://blog.csdn.net/weixin_41192489/article/details/128231728
开启 vue3 的实验性特征
在项目的 vite.config.ts 中添加 reactivityTransform: true,
添加 ts 对 vue3 实验性特征的支持
在项目的 tsconfig.json 中添加 "types": ["vue/ref-macros"]
改用 script setup
与 vue2 不同,vue3 的 js 代码写在 中,如
以下代码都在项目的 src\views\AboutView.vue 中测试,启动项目后,浏览器访问
http://127.0.0.1:5173/about 查看效果。
先将 AboutView.vue 初始化为
在这里插入代码片
定义响应式变量 $ref
vue2中写在 data(){} 函数中的变量,vue3中写法如下
// 定义响应式变量 count,初始值为 0
let count = $ref(0);
计算属性 computed
vue2中写在 computed 中的计算属性,vue3中写法如下
import { computed } from "vue";
let firstName = $ref("朝");
let lastName = $ref("阳");
// 当 firstName 或 lastName 变化时,会触发重新计算 fullName
let fullName = computed(() => {return firstName + lastName;
});
[...numbers]
return [...numbers].reverse()
你好
定义方法 function
vue2中写在 methods 中的方法,vue3中写法如下
// 定义方法 increment,每执行一次,count 会自增 1
function increment() {count++;
}
逻辑极其简单的方法也可以直接写在元素上
在方法后加 () 也会被视为内联事件
此时可以给方法添加参数
需使用 $event
或者使用内联箭头函数
逻辑比较复杂时,则需给事件绑定方法
此时方法的默认参数为原生 DOM 事件 event
// event 为原生 DOM 事件
function show(event: any) {// 通过 event 可以获取事件相关的各种信息console.log(event);if (event) {// 比如触发事件的标签名称console.log(event.target.tagName);}
}
效果同 event.stopPropagation()
event.preventDefault()
使用范例:提交表单时不再重新加载页面
...
范例:滚动事件的默认行为 (scrolling) 将立即发生而非等待 onScroll
完成,以防其中包含 event.preventDefault()
...
.passive 和 .prevent 不能同时使用,因为 .passive 已经向浏览器表明了你不想阻止事件的默认行为。如果同时使用,则 .prevent 会被忽略,并且浏览器会抛出警告。
还可以只使用修饰符,不绑定方法
但要注意调用顺序:
@click.prevent.self 阻止元素及其子元素的所有点击事件的默认行为
@click.self.prevent 只会阻止对元素本身的点击事件的默认行为。
.按键名
即可实现指定按键触发事件
.page-down
常用的按键有以下别名
系统按键修饰符与 keyup 事件一起使用时,该按键必须在事件发出时处于按下状态。如 keyup.ctrl
只会在你按住 ctrl 但松开另一个键时被触发,单独松开 ctrl 键将不会触发。
Do something
控制触发一个事件所需的确定组合
条件渲染 v-if v-show
多个元素需要使用 v-if 控制渲染时,可以添加
包裹
标题
段落一
段落二
v-show 无法在
上使用
列表渲染 v-for
- 既可以用 in ,也可以用 of
- 可使用解构
const items = $ref([{ message: "1" }, { message: "2" }]);
{{ message }} {{ index }}
- 渲染对象
{{ index }}. {{ key }}: {{ value }}
- 渲染整数
效果为 1、2、3、…… n
{{ n }}
- 多个元素需要使用 v-for 渲染时,可以添加
包裹
- {{ item.msg }}
此时 key 也要写在
上
{{ todo.name }}
- key 需为字符串或 number 类型,不要用对象作为 key
v-if 和 v-for 同时存在于一个元素上时
v-if 会首先被执行,但不推荐这种写法
{{ user.name }}
应改用
包裹
- {{ user.name }}
双向绑定 v-model
v-model 绑定的值通常是静态的字符串 (复选框中是布尔值),使用 v-bind 可以将选项值绑定为非字符串的数据类型。
单选按钮 radio
Picked: {{ picked }}
复选框 checkbox
单个复选框
默认值为 true 和 false
通过以下方法可以自定义值
true-value 和 false-value 是 Vue 特有的属性,仅支持和 v-model 配套使用
多个复选框——值为数组
const checkedNames = $ref([])
Checked names: {{ checkedNames }}
自定义复选框
下拉单选 select
Selected: {{ selected }}
v-model 的初始值不匹配任何一个选择项时,会渲染成一个“未选择”的状态。在 iOS 上,这将导致用户无法选择第一项,因为 iOS 在这种情况下不会触发 change 事件。因此,建议提供一个空值的禁用选项,如上例所示。
.lazy 修饰符
默认情况下,v-model 会在每次 input 事件后更新数据
.lazy 修饰符可以改为在每次 change 事件后更新数据
.number 修饰符
让用户输入自动转换为数字
若该值无法被 parseFloat() 处理,则返回原始值。
number 修饰符会在输入框有 type=“number” 时自动启用。
.trim 修饰符
自动去除用户输入内容中两端的空格
父子组件
子组件继承样式
vue2 中限定只能有一个根节点,父组件中给子组件添加的样式,都会渲染在子组件的根节点上,如:
你好
最终渲染的效果为:
你好
vue3 中支持多个根节点,所以需要通过 $attrs
指定具体哪些节点继承父组件添加的样式。
你好
我是朝阳
最终渲染的效果为:
你好
我是朝阳
相关内容