v-model 和 v-bind 是 Vue.js 中用于数据绑定的两个不同指令,它们有不同的用途和功能。

214 阅读1分钟

v-bind

  • 用途:用于单向数据绑定,将数据从 Vue 实例绑定到 HTML 元素的属性上。

  • 语法v-bind:attribute="expression" 或简写为 :attribute="expression"

  • 示例

    html
    <img v-bind:src="imageSrc" alt="Example Image">
    <!-- 简写形式 -->
    <img :src="imageSrc" alt="Example Image">
    

v-model

  • 用途:用于双向数据绑定,即数据可以从 Vue 实例绑定到 HTML 元素,也可以从 HTML 元素绑定回 Vue 实例。

  • 语法v-model="expression"

  • 示例

    html
    <input type="text" v-model="message">
    

区别

  1. 方向

    • v-bind 是单向数据绑定,数据从 Vue 实例流向 DOM。
    • v-model 是双向数据绑定,数据可以在 Vue 实例和 DOM 之间双向流动。
  2. 使用场景

    • v-bind 适用于需要将数据绑定到元素属性的场景,例如 srchrefclass 等。
    • v-model 适用于需要用户输入并更新数据的场景,例如表单输入元素(inputtextareaselect 等)。

联系

  • 共同点:两者都是 Vue.js 中用于数据绑定的指令,都依赖于 Vue 实例中的数据。

  • 结合使用:在某些情况下,v-bind 和 v-model 可以结合使用。例如,你可以在一个表单元素上同时使用 v-model 进行双向绑定,并使用 v-bind 绑定其他属性。

    html
    <input type="text" v-model="message" :placeholder="placeholderText">
    

示例

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 引入 Vue 3 -->
    <script src="https://unpkg.zhimg.com/vue@3.2.36"></script>
</head>
<body>
    <div id="app">
        <p>Vue 版本: {{ vueVersion }}</p>
        <input type="number" v-model="num1" placeholder="输入第一个数字">
        <input type="number" v-model="num2" placeholder="输入第二个数字">
        <input type="number" v-model="result" readonly placeholder="结果">
        <button @click="add">+</button>
        <button @click="sub">-</button>
        <img :src="imageSrc" alt="Example Image">
    </div>
    <!-- 利用Vue3实现一个计算器 -->
    <script>
        const app = Vue.createApp({
            data() {
                return {
                    num1: 0,
                    num2: 0,
                    result: 0,
                    vueVersion: Vue.version,
                    imageSrc: "https://via.placeholder.com/150"
                }
            },
            methods: {
                add() {
                    this.result = this.num1 + this.num2;
                },
                sub() {
                    this.result = this.num1 - this.num2;
                }
            }
        })
        app.mount('#app')
    </script>
</body>
</html>

在这个示例中:

  • v-model 用于双向绑定 num1num2 和 result
  • v-bind 用于单向绑定 imageSrc 到 <img> 元素的 src 属性。