Vue中的DOM(ref,emit)

本文通过两个实例详细介绍了Vue.js中$refs的使用方法。第一个实例展示了如何通过$refs获取DOM元素并响应其点击事件;第二个实例则演示了如何利用$refs访问组件的内部状态,实现组件间的数据交互。

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

<!DOCTYPE html>
<html>
<head>
	<title>change color</title>
	<script src="./vue.js"></script>
</head>
<body>

	<div id='app'>
		<div ref='hello' @click='handleClick'>hello world</div>
	</div>


	<script>
		var vm=new Vue({
			el:'#app',
			methods:{
				handleClick(){
					alert(this.$refs.hello.innerHTML)
				}
			}
		})
	</script>


</body>
</html>

this.$refs 获得所有的引用

<!DOCTYPE html>
<html>
<head>
	<title>change color</title>
	<script src="./vue.js"></script>
</head>
<body>

	<div id='app'>
		<counter @change='handleChange' ref='one'></counter>
		<counter @change='handleChange' ref='two'></counter>
		<div>{{total}}</div>
	</div>

	<script>
		Vue.component('counter',{
			template:"<div @click='handleClick'>{{number}}</div>",
			data(){
				return {
					number:0
				}
			},
			methods:{
				handleClick(){
					this.number++;
					this.$emit('change')
				}
			}
		})

		var vm=new Vue({
			el:'#app',
			methods:{
				handleChange(){
					this.total=this.$refs.one.number+this.$refs.two.number;
				}
			},
			data:{
				total:0
			}
		})
	</script>


</body>
</html>
### Vue 中 `ref` 的作用及用法 #### 一、基本概念 在 Vue 中,`ref` 是一种特殊的属性,用于为 DOM 元素或子组件注册引用信息。通过它可以直接操作 DOM 或者访问子组件的实例及其内部数据和方法[^1]。 --- #### 二、具体功能与场景应用 1. **获取原生 DOM 元素** 当 `ref` 绑定在一个普通的 HTML 元素上时,可以通过 `$refs` 访问该元素的实际 DOM 对象[^2]。 ```html <template> <div> <input type="text" ref="myInput"> <button @click="focusInput">聚焦</button> </div> </template> <script> export default { methods: { focusInput() { this.$refs.myInput.focus(); // 使用 $refs 获取并操作 DOM } } }; </script> ``` 2. **调用子组件的数据 (data)** 如果将 `ref` 添加到一个子组件上,则可以通过此引用访问子组件的实例以及其所有的公开成员(如 data 和 computed 属性)[^4]。 3. **调用子组件的方法** 同样地,在绑定有 `ref` 的子组件中定义的方法也可以被父级组件直接调用[^5]。 子组件示例: ```html <!-- ChildComponent.vue --> <template> <div>这是一个子组件</div> </template> <script> export default { methods: { sayHello() { alert('你好!'); } } }; </script> ``` 父组件调用: ```html <!-- ParentComponent.vue --> <template> <child-component ref="child"></child-component> <button @click="callChildMethod">调用子组件方法</button> </template> <script> import ChildComponent from './ChildComponent'; export default { components: { ChildComponent }, methods: { callChildMethod() { this.$refs.child.sayHello(); // 调用子组件方法 } } }; </script> ``` 4. **子组件调用父组件方法** 子组件可通过 `$emit` 发送自定义事件给父组件,从而间接实现对父组件方法的调用。 子组件触发事件: ```javascript this.$emit('customEvent', '参数'); ``` 父组件监听事件: ```html <child-component @customEvent="handleCustomEvent"></child-component> ``` 5. **其他高级用途** - 可以用来管理复杂的动画逻辑或者第三方库交互。 - 结合生命周期钩子完成更精细的操作,比如初始化某些插件[^3]。 --- #### 三、注意事项 - 不应在模板表达式或其他地方滥用 `$refs`,因为它仅在组件挂载完成后可用。 - 推荐优先使用响应式的状态管理工具(如 reactive/toRefs),而不是频繁依赖于手动控制的 refs。 --- ### 总结 Vue 提供了灵活多样的方式让开发者能够轻松操控页面上的各个部分。其中 `ref` 就是一个非常重要的特性,无论是简单的 DOM 操作还是复杂跨层通信都可以借助它的力量得以简化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值