进阶语法:
v-model原理:
- 原理:v-model本质上是一个语法糖
- 作用:提供数据的双向绑定
- 数据变,视图跟着变:value
- 视图变,数据跟着变@input
- 注意:$event用于在模板中,获取事件的形参
<input v-model="msg" type="text">
//等同于
<input :value="msg" @input="msg = $event.target.value">
- 表单类组件封装
- 父传子:数据应该是父组件props传递过来的,v-model拆解绑定数据
- 子传父:监听输入,子传父传值给父组件修改
//父组件
<BaseSelect :cityID="selectID" @事件名="selectID = $event"></BaseSelect>
//子组件
<select :value="cityID" @change="handleChange">...</select>
props:{
cityID:String
},
methods:{
handleChange(e){
this.$emit('事件名',e.target.value)
}
}
- v-model简化代码:
- 父组件v-model简化代码,实现子组件和父组件数据的双向绑定
- 子组件中:props通过value接收,事件触发input
- 负组件中:v-model给组件直接绑定数据
- 父组件v-model简化代码,实现子组件和父组件数据的双向绑定
//父组件
<BaseSelect v-model="selectID"></BaseSelect>
//子组件
<select :value="cityID" @change="handleChange">...</select>
props:{
value:String
},
methods:{
handleChange(e){
this.$emit('input',e.target.value)
}
}
sync修饰符:
- 作用:可以实现子组件和父组件数据的双向绑定,简化代码
- 特点:props属性名可以自定义,非固定为value
- 本质:就是属性名和@update:属性名的合写
//父组件
<BaseDialog :visible.sync="isShow" />
//等同于
<BaseDialog :visible="isShow" @input:visible="isShow=$event" />
//子组件
props:{
visible:Boolean
},
methods:{
fn(){
this.$emit('update:viible',false);
}
}
ref和$refs:
- 作用:利用ref和$refs可以用于获取dom元素或组件实例
- 特点:查找范围 => 当前组件内(更精确稳定)
- 使用:(获取 dom / 组件)
- 目标标签 => 添加 ref 属性
<div ref="属性名"></div>或<组件名 ref="属性名"></组件名> - 恰当时机,通过
this.$ref.属性名来操作标签,通过this.$ref.属性名来获取目标组件,就可以通过this.$ref.属性名.组件方法()来调用组件对象里面的方法。
- 目标标签 => 添加 ref 属性
- 补充:图标 echarts 组件安装:
#yarn add echarts
Vue异步更新:$nextTick
- $nextTick:等 Dom 更新后,才会触发执行此方法里面的函数。
- 语法:
this.$nextTick(函数体);
自定义指令:
自定义的指令,可以自己封装一些 dom 操作,扩展额外的功能。
使用:
- 全局注册语法:
Vue.directive('指令名',{
//inserted:当元素被插入后的操作
"inserted"(el){
//可以对 el 标签扩展额外的功能
}
});
- 局部注册语法:
directive:{
“指令名”:{
inserted(){
//可以对 el 标签扩展额外的功能
}
}
}
- 使用:
<div v-指令名></div>
指令的值:
- 语法:
- 在绑定指令时,可以通过“等号”的形式为指令绑定具体的参数值。
<div v-指令名="值"></div> - 通过
binding.value可以拿到指令值,指令值修改会触发 update 函数
- 在绑定指令时,可以通过“等号”的形式为指令绑定具体的参数值。
directive:{
"指令名":{
inserted(el,binding){},
update(el,binding)()
}
}
插槽:
- 作用:让组件内部的一些结构支持自定义
- 基本语法:
- 组件内需要定制的结构部分,改用
<slot></slot>占位。 - 使用组件时,组件标签内部传入结构替换
slot。
- 组件内需要定制的结构部分,改用
- 后备内容:
- 封装组件时,可以为预留的
<slot>插槽提供后备内容。 - 语法:在
<slot>标签内放置内容,作为默认显示的内容。
- 封装组件时,可以为预留的
- 具名插槽:
- 语法:
- 多个
slot使用name属性来区分名字<slot name="插槽名"></slot> template配合v-slot:别名来分发对应的标签
- 多个
- 语法:
<template v-slot:插槽名>内容</template>
//或
<template #插槽名></template>
- 作用域插槽:
- 定义
slot插槽的同时,是可以传值的,给插槽上绑定数据,将来使用组件时可以使用。 - 使用步骤:
- 给
slot标签,以添加属性的方式进行传值。<slot :子变量名=“组件内的变量名”></slot> - 在
template中,通过#插槽名=“变量名”接收,默认插槽名为default。
- 给
- 定义
<template #插槽名="变量名">
<div @click="函数名(变量名.子变量名)"></div>
</template>
单页应用程序:
所有功能在一个 html 页面上实现。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
![[学习笔记 Day03]Vue语法进阶:个人编程的学习,更上一层楼!-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250919193418264.jpeg)

![[学习笔记 Day01]C++基础:简单的程序设计,始于梦想的开始!-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/09/20250922171813209.webp)

![[学习笔记 Day01]C#基础:从入门到精通,开启新世纪的编程大门到精通,开启新世纪的编程大门-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/08/20250827185617438.jpeg)





![[自动化 + 手残党专属]宝塔安装AllinSSL证书管理教程-资源刺客](http://images.kodo.cdn.itdka.cn/wp-content/uploads/2025/11/20251112122722716.png)




暂无评论内容