Vue基础语法
常用模板语法
指令
v-once:只渲染一次,后续不会因为数据的改变重现渲染
v-if/v-else-if/v-else(是否在dom树上存在)
v-show(display控制,dom树上是存在的)
v-bind/:(属性绑定)
v-on/@(事件绑定)
v-html、v-text、{{}}
v-model
v-for
事件绑定
- 基础语法
// 绑定单个事件
<button @click="handle">点击</button>
// 绑定多个事件
<button @click="handle1(), handle2()">点击</button>
- 传递参数
// 传递一般参数
<button @click="handle(2)">点击</button> // methods中对应方法为 handle(num) {...}
// 传递事件参数
<button @click="handle">点击</button> // methods中对应方法为 handle(e) {...} 只需要在参数接收列表接收
// 一般参数 + 事件参数:使用$event代表传递的event,接收时一一对应
<button @click="handle(2, $event)">点击</button> // methods中对应方法为 handle(num,e) {...}
- 修饰符
语法为
@事件名称.事件修饰符="事件绑定的函数名称"
// 一般用法
<a @click.prevent="handleClick" href="xxxx">连接</a>
// 常见的事修饰符: stop阻止冒泡 once只执行一次 prevent阻止默认事件的触发
// 键盘修饰符 enter tab
// 鼠标修饰符 left middle right
// 精确修饰符
列表渲染v-for
v-for
优先级高于v-if
所以二者不要使用在同一标签上,否则会导致v-if
无效
// key无变化,原有项复用,提升性能
// key是必须的,且是唯一的,不要使用index
<div v-for="(item, index) in list" :key="唯一值">
// 也是可以循环对象的{key: value}
<div v-for="(value,key, index) in list" :key="唯一值">
双向绑定v-model
常见的双向绑定出现在
input
的type:text, checkbox, radio
、texteara
和select
- 基础语法
data () {
return {
bindVals: ''
}
}
// 输入框的数据变化,会导致data中的数据变化,同理data中的数据变化也会导致输入框中的数据变化
<input type="text" v-model="bindVals" />
- 复杂的双向绑定
// checkbox data中存在一个数组 message: [],选中的value会加入数组
<input type="checkbox" v-model="message" value="1"/>
<input type="checkbox" v-model="message" value="2"/>
<input type="checkbox" v-model="message" value="3"/>
// radio data中存在 message:""选中的会让message等于其值
// select 类似于checkbox
- 常见修饰符:
.lazy、.number、.trim
动态属性
采用[]动态计算属性名称,一般用于
v-bind/v-on
中
<div :[name]="message">{{text}}</div>
<button @[eventName]="handle">按钮</button>
data & methods & watcher & computed
methods
methods: {
handle () {
...
}
}
methods
中的所有方法函数中的this
都指向vue实例
,定义函数不要使用箭头函数,否则会有this
指向问题
computed
data () {
return {
count: 2,
price: 10
}
},
computed:{
total() {
return this.count * this.price;
}
}
template: `<div>{{total}}</div>`
// 修改count或price中的任意一个都会导致total的改变
computed
中的函数只有依赖的数据发生变化时才会重新执行计算,methods
中的函数只要页面重新渲染就会被执行
watch
- 数据变化后执行异步操作
watch: {
price () {
// current当前修改的值, pre初始的值
setTimeout((curent, pre) =>{
console.log('price changend');
},3000);
}
}
样式绑定
- 字符串控制 | 数组控制 | 对象控制
<style>
.red {
color: "red"
}
</style>
data () {
return {
styleStr: 'red', // 字符串控制
styleObj: {'red': true, green: true}, // 对象控制,true表示显示,false表示不显示 :class="styleObj"
styleArr: ['red'] // 在数组中表示显示,不在表示不显示 :class="styleArr"
}
},
template: `<div :class="styleStr">这是一个盒子</div>`
- 行内样式
data () {
return {
lineStyle: {
color: 'red'
}
}
},
// template: `<div style="color: green">这是一个盒子</div>`
template: `<div :style="lineStyle">这是一个盒子</div>`
- 子组件接受父组件的样式
$attr.class
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App