◆
Vue 常用指令与语法糖:v-if/v-show、v-for、v-model
method
Vue自动为methods绑定this,以便于它始终指向组件实例。 这将确保方法在用作事件监听或回调时保持正确的this指向。 在定义methods时应避免使用箭头函数,因为这会阻止Vue绑定恰当的this指向。
v-if vs v-show
相同点:v-if 与 v-show 都可以动态控制 dom 元素显示隐藏
- 手段:
v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐; - 编译过程:
v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换; - 编译条件:
v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
- 性能消耗:
v-if有更高的切换消耗;v-show有更高的初始渲染消耗; - 使用场景:
v-if适合运营条件不大可能改变;v-show适合频繁切换。
需要注意的是,当一个元素默认在
css中加了display:none属性,这时通过if-show修改为true是无法让元素显示的。 原因是显示隐藏切换,只是会修改element style为display:""或者display:none,并不会覆盖掉或修改已存在的css属性。
- 使用
v-show的话,在vue解析之前隐藏DOM的话,尽量在style属性里面设置display的值,不要在css文件中。如下所示
<template>
<div class="jz">
<div class="subJz">
<p v-if="true" style="display: none;">我是测试文字1</p>
<p v-show="true" style="display: none;">我是测试文字2</p>
<p v-if="true" class="hidden">我是测试文字3</p>
<p v-show="true" class="hidden">我是测试文字4</p>
<p v-show="true">我是测试文字5</p>
<p v-if="true">我是测试文字6</p>
<p style="display: block" v-show="false">我是测试文字7</p>
<p v-if="false" style="display: block">我是测试文字8</p>
<p v-if="false" class="show">我是测试文字9</p>
<p v-show="false" class="show">我是测试文字10</p>
</div>
</div>
</template>
<style>
.hidden {
display: none;
}
.show {
display: block;
}
.jz {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
border: 1px solid green;
text-align: center;
}
.subJz {
width: 500px;
height: 300px;
border: 1px solid gold;
}
</style>
v-for 遍历
- v-for 遍历对象
<ul id="v-for-object" class="demo">
<li v-for="(value, name, index) in myObject">
{{ index }}. {{ name }}: {{ value }}
</li>
</ul>
data();
{
return {
myObject: {
title: 'How to do lists in Vue',
author: 'Jane Doe',
publishedAt: '2016-04-10',
},
};
}

v-for遍历数组时可以把in换成of,类似与for of
<li v-for="(item, index) in items">
{{ parentMessage }} - {{ index }} - {{ item.message }}
</li>
<li v-for="(item, index) of items">
{{ parentMessage }} - {{ index }} - {{ item.message }}
</li>
v-for与v-if一同使用
当它们处于同一节点,
v-if的优先级比v-for更高,这意味着v-if将没有权限访问v-for里的变量: 可以把 v-for 移动到 template 标签中来来使用
修饰符
<!-- 阻止单击事件继续传播 -->
<a @click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form @submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a @click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form @submit.prevent></form>
<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div @click.capture="doThis">...</div>
<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div @click.self="doThat">...</div>
<!-- 点击事件将只会触发一次 -->
<a @click.once="doThis"></a>
<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` -->
<input @keyup.enter="submit" />
<!--.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。-->
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button>
<!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>
<!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成 -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div @scroll.passive="onScroll">...</div>
这个 .passive 修饰符尤其能够提升移动端的性能。 不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。
- 常用按键修饰符 vue 提供的别名
- .enter
- .tab
- .delete (捕获“删除”和“退格”键)
- .esc
- .space
- .up
- .down
- .left
- .right
v-model 语法糖
自定义事件也可以用于创建支持 v-model 的自定义输入组件。记住:
<input v-model="searchText" />
等价于:
<input :value="searchText" @input="searchText = $event.target.value" />
当用在组件上时,v-model 则会这样:
<custom-input
:model-value="searchText"
@update:model-value="searchText = $event"
></custom-input>

还没有留言,来发表第一条吧~