Vue双向绑定v-model

本文介绍了Vue.js中v-model指令的应用,展示了如何实现表单输入控件与Vue实例数据的双向绑定。通过两个示例,详细解释了v-model如何同步视图与数据的变化,并结合v-if指令展示条件渲染。

例子1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app"> 
		    //通过v-model将视图和数据绑定,当视图的数据人为改变,vm的data属性也会变化
			输入的文本:<input type="text" v-model="msg">{{msg}} 
			<br>
			<select v-model="selected">
				<option value='' disabled="disabled">---请选择---</option>
				<option>A</option>
				<option>B</option>
				<option>C</option>
			</select>  
		</div>
		
		<script>
			var vm = new Vue({
				el:"#app",
				data:{
					msg:"hello,Vue!",
					selected:''
				}
			});
		</script>
	</body>
</html>

在这里插入图片描述
注意:
v-model会忽略表单元素(input,textarea,select)的value、checked、selected特性的初始值而总是将vue实例的数据作为来源。可以通过js在组件data选项中声明初始值。

例子2

<div id="app">
	<input type="checkbox" v-model="isSelected" />是否勾选
	<h1 v-if="isSelected">勾选</h1>
	<h1 v-else>未勾选</h1>
</div>
 
<script>
	var vm = new Vue({
		el:"#app",
		data:{
			isSelected:false
		}
	});
</script>

在这里插入图片描述

### Vue 中如何实现 `v-if` 条件渲染与双向绑定的结合使用 在 Vue 中,`v-if` 指令用于根据条件表达式的真假值来决定是否渲染某个元素,而 `v-model` 则用于在表单元素或组件上创建双向绑定[^3]。这两者的结合可以实现根据用户输入动态控制某些内容的显示或隐藏。 #### 1. 基本用法 可以通过 `v-model` 绑定一个数据属性,然后使用该属性作为 `v-if` 的条件表达式,从而实现动态条件渲染。例如,通过复选框控制某段文字的显示与隐藏: ```html <template> <div> <label> 显示内容: <input type="checkbox" v-model="showMessage"> </label> <p v-if="showMessage">这段文字会根据复选框的状态显示或隐藏。</p> </div> </template> <script> export default { data() { return { showMessage: false }; } }; </script> ``` 在这个例子中,`showMessage` 通过 `v-model` 与复选框进行双向绑定。当复选框被选中时,`showMessage` 变为 `true`,`<p>` 元素将被渲染并显示在页面上;否则,该元素不会被渲染[^3]。 #### 2. 复杂数据绑定与响应式更新 在处理复杂对象或数组时,Vue 的响应式系统可能无法自动检测到某些更改,例如直接通过索引修改数组元素或更改对象的属性。这种情况下,即使 `v-if` 的条件表达式发生了变化,组件也不会重新渲染[^2]。 为了解决这个问题,可以使用 `this.$set` 方法来确保数据的响应性。例如: ```html <template> <div> <button @click="toggleMessage">切换显示</button> <p v-if="messageVisible">这是一个通过 $set 控制显示的消息。</p> </div> </template> <script> export default { data() { return { message: { visible: false } }; }, computed: { messageVisible() { return this.message.visible; } }, methods: { toggleMessage() { this.$set(this.message, 'visible', !this.message.visible); } } }; </script> ``` 在这个示例中,`message.visible` 是一个嵌套在对象中的属性。通过 `this.$set` 方法设置该属性,可以确保 Vue 能够检测到变化并重新渲染 `v-if` 控制的 `<p>` 元素[^2]。 #### 3. 控制组件的创建与销毁 结合 `v-if` 与 `v-model` 还可以用于控制子组件的创建与销毁。例如,根据用户的选择动态加载或卸载某个组件: ```html <template> <div> <label> 加载组件: <input type="checkbox" v-model="loadComponent"> </label> <my-component v-if="loadComponent"></my-component> </div> </template> <script> import MyComponent from './MyComponent.vue'; export default { components: { MyComponent }, data() { return { loadComponent: false }; } }; </script> ``` 在这个例子中,当 `loadComponent` 为 `true` 时,`<my-component>` 会被创建并插入 DOM;当其为 `false` 时,组件会被销毁。这种机制可以有效控制资源的使用,尤其是在需要频繁切换组件状态的场景中[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值