Vue模板语法

71 阅读3分钟

在使用Vue.js开发Web应用时,理解其模板语法是构建动态和响应式用户界面的关键。Vue的模板语法提供了一种直观的方式来将数据绑定到DOM,并根据数据的变化自动更新视图。本文将详细介绍Vue的模板语法,包括文本插值、指令、计算属性等内容。

一、文本插值

文本插值是Vue中最基础的数据绑定方式之一,它允许你将数据直接插入到HTML中。Vue使用双大括号{{ }}作为文本插值的标记。

<div id="app">
    {{ message }}
</div>

<script src="https://cdn.jsdelivr.net/npm/vue@next"></script>
<script>
    const app = Vue.createApp({
        data() {
            return {
                message: 'Hello Vue!'
            }
        }
    }).mount('#app');
</script>

message的数据发生变化时,Vue会自动更新页面上的显示内容。

(一)原始HTML

如果需要输出原始HTML,可以使用v-html指令代替简单的文本插值:

<div v-html="rawHtml"></div>

注意:永远不要将不受信任的内容传递给v-html,以防遭受XSS攻击。

二、指令系统

Vue提供了一系列以v-开头的特殊属性——指令,这些指令提供了强大的功能来操作DOM。以下是几个常用的指令示例:

(一)v-if 和 v-show

  • v-if: 条件性地渲染元素。只有当表达式的值为真时,该元素才会被渲染。

    <p v-if="isVisible">这段文字只有当isVisible为true时才会显示。</p>
    
  • v-show: 类似于v-if,但是它通过CSS的display属性控制元素的可见性,无论条件如何都会渲染元素,因此切换速度更快。

    <p v-show="isVisible">这段文字只有当isVisible为true时才会显示。</p>
    

(二)v-for

用于循环渲染列表。例如:

<ul>
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>

:key是一个特殊的属性,帮助Vue识别每个节点的身份,以便更高效地重用和重新排序元素。

(三)v-bind

用于动态绑定HTML属性。简写形式为:

<img v-bind:src="imageSrc" alt="动态图片">
<!-- 简写 -->
<img :src="imageSrc" alt="动态图片">

(四)v-on

监听DOM事件。简写形式为@

<button @click="increment">点击我增加计数器</button>

三、计算属性与侦听器

除了基本的数据绑定外,Vue还提供了计算属性(Computed Properties)和侦听器(Watchers)来处理更复杂的逻辑。

(一)计算属性

当你有一些依赖其他数据的数据时,使用计算属性可以使代码更加简洁和易于维护。

const app = Vue.createApp({
    data() {
        return {
            firstName: 'John',
            lastName: 'Doe'
        }
    },
    computed: {
        fullName() {
            return `${this.firstName} ${this.lastName}`;
        }
    }
});

(二)侦听器

如果你需要在某个数据变化时执行异步或开销较大的操作,可以使用侦听器。

watch: {
    question(newQuestion) {
        // 执行一些操作...
    }
}

四、Class 与 Style 绑定

Vue也支持对class和inline styles进行动态绑定,使得你可以根据数据状态来动态修改元素的样式。

(一)绑定Class

可以通过对象语法或者数组语法来绑定class。

  • 对象语法:

    <div :class="{ active: isActive, 'text-danger': hasError }"></div>
    
  • 数组语法:

    <div :class="[activeClass, errorClass]"></div>
    

(二)绑定Inline Styles

同样,也可以通过对象或数组的方式绑定内联样式。

<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

五、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!