vue组件介绍之ref

尽管组件中存在prop和事件,但有时候仍需要直接访问一个子组件;为了达到这个目的,可以通过ref这个属性为子组件赋予一个ID引用。

vue2组件中ref的使用

//base-input子组件
<template>
<input
ref="input"
type="text"
:value="value"
@input="$emit('input', $event.target.value)"
/>
</template>
<script>
export default {
    props:{
    	value:[String, Number]
    },
    data(){
        return { }
    },
    methods:{
    	/*获取焦点方法*/
    	focus(e){
			this.$refs.input.focus();
		}
    }
}
</script>
/*父组件*/
<template>
<div class="index-main">
	<base-input ref="usernameInput" v-model="inputVal"></base-input>
</div>
</template>
<script>
import base-input from '../components/BaseInput';//普通组件
export default {
	components:{
	     'base-input': base-input
	},
	data(){
	   return {
	   	  inputVal:""
	   }
	},
	mounted(){
		/*父组件页面加载完成后使input自动获取焦点*/
		this.$refs.usernameInput.focus();
	},
}
</script>

父组件使用ref属性定义一个唯一值,通过this.$refs.usernameInput访问子组件中的data和method;

$refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs。

vue3组件中ref的用法

当vue3子组件使用组合式API时,即使用< script setup >的写法,组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 < script setup> 中声明的绑定。

如果需要暴露子组件中某个方法或者属性,需要通过defineExpose 编译器宏来显式指定。

/*子组件*/
<template>
	<input ref="inputRef" type="text" :value="value" />
</template>

<script setup>
	import { ref } from 'vue'
	const props = defineProps({
		value: [String,Number]
	})
	const inputRef = ref();
	const msg = ref('测试');
	function focus(){
		inputRef.value.focus();
	}
	defineExpose({focus,msg})
</script>
/*父组件*/
<script setup>
import {ref } from 'vue';
import BaseInput from '@/components/BaseInput.vue'
const inputVal = ref('');

const usernameInput = ref();
onMounted(()=>{
	console.log(usernameInput.value.msg);//测试,获取子组件msg的值
	usernameInput.value.focus(); //调取子组件的focus方法
})
</script>

<template>
	<div class="index-main">
		<BaseInput ref="usernameInput" :value="inputVal"></BaseInput>
	</div>
</template>

相关推荐

  1. vue介绍ref

    2024-06-12 09:40:03       30 阅读
  2. vue使用elementui的的对话框;使用ref

    2024-06-12 09:40:03       38 阅读
  3. Vue基础详细介绍

    2024-06-12 09:40:03       31 阅读
  4. Vue中Suspense详细介绍

    2024-06-12 09:40:03       39 阅读
  5. vueref与$parent/$children⽗⼦通信例子

    2024-06-12 09:40:03       31 阅读
  6. vue 中 ui 二次封装后 ref 怎么穿透到子组件里

    2024-06-12 09:40:03       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 09:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 09:40:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 09:40:03       82 阅读
  4. Python语言-面向对象

    2024-06-12 09:40:03       91 阅读

热门阅读

  1. 什么是CUDA

    2024-06-12 09:40:03       27 阅读
  2. 【神经网络】资源

    2024-06-12 09:40:03       30 阅读
  3. css连续动画(动画组)

    2024-06-12 09:40:03       25 阅读
  4. Solidity智能合约事件(event)

    2024-06-12 09:40:03       32 阅读
  5. 镜像没有包含 shell 导致无法进入容器

    2024-06-12 09:40:03       25 阅读
  6. openssl工具国际/国密签名命令行流程

    2024-06-12 09:40:03       27 阅读
  7. 互联网摸鱼日报(2024-06-11)

    2024-06-12 09:40:03       31 阅读