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">
区别
-
方向:
v-bind是单向数据绑定,数据从 Vue 实例流向 DOM。v-model是双向数据绑定,数据可以在 Vue 实例和 DOM 之间双向流动。
-
使用场景:
v-bind适用于需要将数据绑定到元素属性的场景,例如src、href、class等。v-model适用于需要用户输入并更新数据的场景,例如表单输入元素(input、textarea、select等)。
联系
-
共同点:两者都是 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用于双向绑定num1、num2和result。v-bind用于单向绑定imageSrc到<img>元素的src属性。