文章目录
- 一、核心概念
- 二、插值操作
- 三、属性绑定
- 四、表达式支持
- 五、指令系统
- 六、用户输入与双向数据绑定
- 七、过滤器
- 八、缩写语法
一、核心概念
Vue.js 的精髓在于其简洁而高效的模板系统。通过这个系统,开发者能够以声明式的方式,轻松地将 DOM 元素与 Vue 实例中的数据建立紧密的绑定关系。这意味着,当数据发生变化时,DOM 会自动更新,反之亦然,极大地提升了开发效率和用户体验。
并且,Vue.js 与响应系统紧密结合。当应用的状态出现改变时,Vue 凭借其智能的计算能力,能够精准地确定重新渲染组件所需的最小代价,并高效地将其应用到实际的 DOM 操作中,避免了不必要的资源浪费和性能开销。
二、插值操作
文本插值:在 Vue.js 中,最常见且基础的数据绑定形式便是使用双大括号 {{…}} 进行文本插值。例如:
<div id="app"><p>{{ message }}</p>
</div>
javascript
new Vue({el: '#app',data: {message: 'Hello Vue!'}
})
在上述代码中,{{ message }} 会被替换为 Vue 实例中 data 里的 message 属性值,从而实现数据到文本的动态绑定。
HTML 插值(v-html 指令):当我们需要在 DOM 中输出 HTML 代码时,就会用到 v-html 指令。比如:
<div id="app"><div v-html="message"></div>
</div>
new Vue({el: '#app',data: {message: '<h1>欢迎来到 Vue 世界</h1>'}
})
这里,v-html 指令会将 message 的值解析为 HTML 并渲染到页面上,但需要注意的是,使用该指令时要确保数据来源的安全性,防止 XSS 攻击。
三、属性绑定
在 HTML 属性的设置中,Vue.js 提供了 v-bind 指令来实现响应式的属性绑定。例如,我们可以根据一个布尔值来动态切换一个 CSS 类:
<div id="app"><label for="r1">切换样式</label><input type="checkbox" v-model="use" id="r1"><br><br><div v-bind:class="{'class1': use}">v-bind:class 指令示例</div>
</div>
new Vue({el: '#app',data:{use: false}
});
在这个例子中,当 use 的值为 true 时,div 元素会添加 class1 类,否则不添加,从而实现了属性的动态绑定和样式的切换。
四、表达式支持
Vue.js 为开发者提供了全面的 JavaScript 表达式支持,这使得我们在模板中可以进行各种灵活的运算和逻辑判断。例如:
<div id="app">{{5+5}}<br>{{ ok? '是' : '否' }}<br>{{ message.split('').reverse().join('') }}<div v-bind:id="'list-' + id">学习 Vue</div>
</div>
new Vue({el: '#app',data: {ok: true,message: 'Vue 教程',id : 1}
})
在上述代码中,我们可以看到在双大括号内可以进行加法运算、三元表达式运算以及字符串的反转操作等,并且在 v-bind 指令中也可以使用表达式来动态生成属性值。
五、指令系统
- 指令基础: 指令是 Vue.js 模板语法中的重要组成部分,它们带有 v- 前缀,是一种特殊的属性。指令的主要作用是在表达式的值发生改变时,将特定的行为应用到 DOM 元素上。例如,v-if 指令:
<div id="app"><p v-if="seen">你能看到我啦</p>
</div>
new Vue({el: '#app',data: {seen: true}
})
这里,v-if 指令会根据 seen 的值(true 或 false)来决定是否将 p 元素插入到 DOM 中,实现了条件渲染的功能。
- 指令参数: 指令后面可以跟一个冒号来指明参数,不同的指令对参数有不同的作用。以 v-bind 指令为例:
<div id="app"><pre><a v-bind:href="url">访问网站</a></pre>
</div>
new Vue({el: '#app',data: {url: 'https://vuejs.org'}
})
在这个例子中,href 就是 v-bind 指令的参数,它告知指令将 a 元素的 href 属性与 Vue 实例中的 url 值进行绑定,实现了响应式的链接地址设置。
同样,v-on 指令用于监听 DOM 事件,例如:
<a v-on:click="doSomething">点击我</a>
这里的 click 就是 v-on 指令的参数,表示监听的是 click 事件,当事件触发时,会执行 doSomething 方法。
- 指令修饰符: 修饰符是以半角句号 . 指明的特殊后缀,用于对指令进行特殊的行为绑定。例如,.prevent 修饰符与 v-on 指令结合使用时:
<form v-on:submit.prevent="onSubmit"></form>
在这个例子中,.prevent 修饰符告诉 v-on 指令,当表单提交事件触发时,调用 event.preventDefault() 方法,阻止表单的默认提交行为,从而可以在 JavaScript 中进行自定义的提交逻辑处理。
六、用户输入与双向数据绑定
- 双向数据绑定(v-model 指令): 在处理用户输入时,Vue.js 提供了 v-model 指令来实现双向数据绑定,这在表单元素中非常实用。例如:
<div id="app"><p>{{ message }}</p><input v-model="message">
</div>
new Vue({el: '#app',data: {message: '初始文本'}
})
在上述代码中,当用户在输入框中输入内容时,message 的值会自动更新,同时,页面上显示的文本也会实时更新为输入框中的内容,实现了数据的双向流动,方便快捷地处理用户输入数据并实时反馈到界面上。
按钮事件与用户输入响应:除了表单输入框,我们还可以使用 v-on 指令来监听按钮的点击事件,并对用户的输入进行相应的处理。例如,实现一个字符串反转的功能:
<div id="app"><p>{{ message }}</p><button v-on:click="reverseMessage">反转字符串</button>
</div>
new Vue({el: '#app',data: {message: '待反转字符串'},methods: {reverseMessage: function () {this.message = this.message.split('').reverse().join('')}}
})
当用户点击按钮时,reverseMessage 方法会被调用,将 message 的值进行反转,并更新到页面上显示出来,实现了对用户操作的响应和数据的动态更新。
七、过滤器
Vue.js 允许开发者自定义过滤器,用于常见的文本格式化操作,过滤器通过 “管道符” | 来指示。例如,我们可以定义一个将字符串首字母大写的过滤器:
<div id="app">{{ message | capitalize }}
</div>
new Vue({el: '#app',data: {message: 'hello vue'},filters: {capitalize: function (value) {if (!value) return ''value = value.toString()return value.charAt(0).toUpperCase() + value.slice(1)}}
})
在上述代码中,{{ message | capitalize }} 会将 message 的值通过 capitalize 过滤器进行处理,将首字母转为大写后显示在页面上。
过滤器还可以串联使用,例如:{{ message | filterA | filterB }},这样会依次将 message 的值通过 filterA 和 filterB 两个过滤器进行处理。
同时,过滤器也可以接受参数,例如:{{ message | filterA(‘arg1’, arg2) }},其中 message 是第一个参数,‘arg1’ 是传给过滤器的第二个参数,arg2 表达式的值会被求值后作为第三个参数传给过滤器,从而实现更加灵活和强大的文本处理功能。
八、缩写语法
为了提高开发效率和代码的简洁性,Vue.js 为两个常用的指令提供了缩写形式。
- v-bind 缩写:
<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>
使用 : 来代替 v-bind:,实现了更简洁的属性绑定语法,让代码更加清晰易读。
- v-on 缩写:
<!-- 完整语法 -->
<a v-on:click="doSomething"></a>
<!-- 缩写 -->
<a @click="doSomething"></a>
通过 @ 来代替 v-on:,简化了事件监听的语法,方便开发者在模板中快速绑定事件处理函数。