03 Vue 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点

本文深入解析Vue.js的双向数据绑定、事件处理及DOM节点获取等关键特性。通过实例演示了如何使用v-model实现数据与视图同步,v-on绑定事件处理器,以及通过ref属性直接操作DOM元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue 双向数据绑定(model、view)

template模板:

<template>
	<div id="app">
		<input type="text" v-model="msg">
	</div>
</template>

js代码模块:

<script>
	/*
	 * 双向数据绑定	MVVM vue本身就是一个MVVM的框架
	 * M model      V  view
	 * MVVM,model改变会影响视图view,view视图的改变会反过来作用影响model
	 * 
	 * 双向数据绑定必须在表单中使用*/
	export default {
		name: 'app',
		data() { /*业务逻辑里面定义的数据*/
			return {
				msg: '你好,Vue!'
			}
		},
	}
</script>

运行结果:
在这里插入图片描述

Vue 事件介绍(v-on:click 或 @click)

template模块:

<template>
	<div id="app">
		<input type="text" v-model="msg">
		<button v-on:click="getMsg()">获取表单里面的数据</button>
		<button v-on:click="setMsg()">设置表单里面的数据</button>
		</div>
</template>

js模块:

<script>
	/*
	 * 双向数据绑定	MVVM vue本身就是一个MVVM的框架
	 * M model      V  view
	 * MVVM,model改变会影响视图view,view视图的改变会反过来作用影响model
	 * 
	 * 双向数据绑定必须在表单中使用*/
	export default {
		name: 'app',
		data() { /*业务逻辑里面定义的数据*/
			return {
				msg: '你好,Vue!'
			}
		},
		methods: { /*放方法的地方*/
			getMsg() {
				//在方法里面获取data里面的数据 
				alert(this.msg);
			},
			setMsg() {
				this.msg = "我是改变后的表单数据!"
			},
		}
	}
</script>

运行结果:
在这里插入图片描述
在这里插入图片描述

Vue ref-获取dom节点

ref获得dom节点: ref=“username” ==>显示数据this.$refs.username.value

实例一

template:

<template>
	<div id="app">
		<input type="text" ref="userinfo"/>
		<button v-on:click="getInputValue()">获取第二个表单里面的数据</button>
	</div>
</template>

js:

<script>
export default {
	name: 'app',
	methods: { /*放方法的地方*/
		getInputValue() {
			console.log(this.$refs.userinfo);
			alert(this.$refs.userinfo.value);
		},
	}
}
</script>

运行效果:
在这里插入图片描述

实例二

template:

<template>
	<div id="app">
		<div ref="box">This is a box!</div><br>
		<button v-on:click="changeBoxBackground()">改变box的背景颜色</button>
	</div>
</template>

js:

changeBoxBackground() {
	this.$refs.box.style.background = 'red';
}

运行效果:
在这里插入图片描述

完整代码如下:

template:

<template>
	<div id="app">
		<input type="text" v-model="msg">
		<button v-on:click="getMsg()">获取表单里面的数据</button>
		<button v-on:click="setMsg()">设置表单里面的数据</button>
		<br><hr>
		<input type="text" ref="userinfo"/>
		<button v-on:click="getInputValue()">获取第二个表单里面的数据</button>
		<br><hr>
		<div ref="box">This is a box!</div><br>
		<button v-on:click="changeBoxBackground()">改变box的背景颜色</button>
	</div>
</template>

js:

<script>
	/*
	 * 双向数据绑定	MVVM vue本身就是一个MVVM的框架
	 * M model      V  view
	 * MVVM,model改变会影响视图view,view视图的改变会反过来作用影响model
	 * 
	 * 双向数据绑定必须在表单中使用*/
	export default {
		name: 'app',
		data() { /*业务逻辑里面定义的数据*/
			return {
				msg: '你好,Vue!'
			}
		},
		methods: { /*放方法的地方*/
			getMsg() {
				//在方法里面获取data里面的数据 
				alert(this.msg);
			},
			setMsg() {
				this.msg = "我是改变后的表单数据!"
			},
			getInputValue() {
				console.log(this.$refs.userinfo);
				alert(this.$refs.userinfo.value);
			},
			changeBoxBackground() {
				this.$refs.box.style.background = 'red';
			}
		}
	}
</script>
Vue2中,可以使用`v-bind`和`v-on`指令来实现数据双向绑定和事件绑定。在JS中,可以使用`appendChild`和`createElement`方法来插入DOM节点。 以下是一个例子,假设我们需要在页面中插入一个按钮,并且当点击按钮时,能够改变页面中的数据: HTML代码: ```html <div id="app"> <button id="my-btn">Click Me</button> </div> ``` JS代码: ```javascript var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }, mounted: function() { var btn = document.getElementById('my-btn'); var self = this; btn.addEventListener('click', function() { self.message = 'You clicked the button!'; }); } }); ``` 上述代码中,我们首先创建了一个Vue实例,并将其挂载到id为`app`的元素上。在`data`选项中,我们定义了一个`message`属性,用于存储页面中的数据。在`mounted`钩子函数中,我们获取到id为`my-btn`的按钮元素,并使用`addEventListener`方法为其绑定了一个`click`事件。在事件处理函数中,我们将`message`属性的值修改为`You clicked the button!`,这样就能实现页面数据的双向绑定和事件绑定了。 当然,以上代码中没有使用Vue提供的`v-bind`和`v-on`指令,这是因为在插入DOM节点时,Vue的模板编译器无法识别这些动态创建的节点。如果需要使用`v-bind`和`v-on`指令,可以使用Vue提供的`createElement`方法来创建元素节点,然后使用`$mount`方法将其挂载到页面上。例如: ```javascript var app = new Vue({ data: { message: 'Hello Vue!' }, mounted: function() { var btn = this.$refs.myBtn; var self = this; btn.addEventListener('click', function() { self.message = 'You clicked the button!'; }); }, render: function(createElement) { return createElement('div', [ createElement('button', { attrs: { id: 'my-btn' }, ref: 'myBtn', on: { click: this.handleClick } }, 'Click Me') ]); }, methods: { handleClick: function() { this.message = 'You clicked the button!'; } } }); app.$mount('#app'); ``` 上述代码中,我们首先创建了一个Vue实例,并在`render`方法中使用`createElement`方法来创建了一个按钮元素。在按钮元素的`on`属性中,使用了`handleClick`方法来处理`click`事件。在`mounted`钩子函数中,我们获取到按钮元素,并使用`addEventListener`方法为其绑定了一个`click`事件。在事件处理函数中,我们将`message`属性的值修改为`You clicked the button!`,这样就能实现数据的双向绑定和事件绑定了。最后,使用`$mount`方法将Vue实例挂载到页面上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值