本文内容来自:https://www.bilibili.com/video/BV1Rs4y127j8/
数据绑定最常见的形式就是使用“Mustache” (双大括号) 语法的文本插值
<span>Message: {{ msg }}span>
一般配合js
中的data()
设置数据
export default {
name: 'HelloWorld',
data(){
return{
msg:"消息提示"
}
}
}
双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用v-html
指令
<p>Using mustaches: {{ rawHtml }}p>
<p>Using v-html directive: <span v-html="rawHtml">span>p>
data(){
return{
rawHtml:"百战"
}
}
Mustache 语法不能在 HTML 属性中使用,然而,可以使用 v-bind
指令
<div v-bind:id="dynamicId">div>
data(){
return{
dynamicId:1001
}
}
v-bind:
可以简写成 :
在我们的模板中,我们一直都只绑定简单的 property 键值,Vue.js 都提供了完全的 JavaScript 表达式支持
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
这些表达式会在当前活动实例的数据作用域下作为 JavaScript 被解析。有个限制就是,每个绑定都只能包含单个表达式,所以下面的例子都不会生效。
<!-- 这是语句,不是表达式:-->
{{ var a = 1 }}
<!-- 流程控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}
v-if
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true
值的时候被渲染。
<p v-if="flag">我是孙猴子p>
data() {
return {
flag: true
}
}
你可以使用 v-else
指令来表示 v-if
的“else 块”
<p v-if="flag">我是孙猴子p>
<p v-else>你是傻猴子p>
data() {
return {
flag: false
}
}
另一个用于条件性展示元素的选项是 v-show
指令
<h1 v-show="ok">Hello!h1>
v-if
vs v-show
的区别v-if
是“真正”的条件渲染,因为它会确保在切换过程中,条件块内的事件监听器和子组件适当地被销毁和重建。
v-if
也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
相比之下,v-show
就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
一般来说,v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销。
因此,如果需要非常频繁地切换,则使用 v-show
较好;如果在运行时条件很少改变,则使用 v-if
较好
v-for
把一个数组映射为一组元素我们可以用 v-for
指令基于一个数组来渲染一个列表。v-for
指令需要使用 item in items
形式的特殊语法,其中 items 是源数据数组,而 item
则是被迭代的数组元素的别名。
<ul>
<li v-for="item in items">{{ item.message }}li>
ul>
data() {
return {
items: [{ message: 'Foo' }, { message: 'Bar' }]
}
}
当 Vue 正在更新使用 v-for
渲染的元素列表时,它默认使用“就地更新”的策略。
如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。
为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一的 key
attribute:
<div v-for="(item,index) in items" :key="item.id|index">
div>
v-on
可以使用 v-on
指令 (通常缩写为 @
符号) 来监听 DOM 事件,并在触发事件时执行一些 JavaScript。
用法为 v-on:click="methodName"
或使用快捷方式 @click="methodName"
<button @click="counter += 1">Add 1button>
data() {
return {
counter: 0
}
}
然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on
指令中是不可行的。
因此 v-on
还可以接收一个需要调用的方法名称。
<button @click="greet">Greetbutton>
methods: {
greet(event) {
// `event` 是原生 DOM event
if (event) {
alert(event.target.tagName)
}
}
}
这是官方的翻译称呼,其实我们可以直接叫他 “事件传递参数”
<button @click="say('hi')">Say hibutton>
<button @click="say('what')">Say whatbutton>
methods: {
say(message) {
alert(message)
}
}
你可以用 v-model
指令在表单 、
及
元素上创建双向数据绑定。
它会根据控件类型自动选取正确的方法来更新元素。
尽管有些神奇,但 v-model
本质上 不过是语法糖。
它负责监听用户的输入事件来更新数据,并在某种极端场景下进行一些特殊处理。
<input v-model="message" placeholder="edit me" />
<p>Message is: {{ message }}p>
data() {
return {
message:""
}
}
.lazy
在默认情况下,v-model
在每次 input
事件触发后将输入框的值与数据进行同步 。你可以添加 lazy
修饰符,从而转为在 change
事件之后进行同步
<input v-model.lazy="message" />
<p>Message is: {{ message }}p>
data() {
return {
message:""
}
}
.trim
如果要自动过滤用户输入的首尾空白字符,可以给 v-model
添加 trim
修饰符
<input v-model.trim="message" />
data() {
return {
message:""
}
}
2023-07-19