Vue2(笔记27) - 脚手架 - ref属性

时间:2022-12-09 07:55:17

ref属性

之前学过一个 key 的属性,是Vue里的关键词,这次引入 ref 属性;

看个需求:点击按钮输出 h1 这个DOM元素;

<template>
<div>
<img src="./assets/logo.png" alt="logo">
<h1 v-text="msg" id="title"></h1>
<button @click="showDOM">点我输入h1的DOM</button>
<school/>
</div>
</template>

<script>
// 引入组件
import school from './components/school.vue'

export default {
name:'app',
components:{
school,
},
data(){
return{
msg:'欢迎学习Vue!'
}
},
methods:{
showDOM(){
console.log('@@@',document.getElementById('title'));
}
}
}
</script>

这个是 App.vue 的组件页面,只引入了一个模板;

需求是输出 h1 元素,代码使用了原生JS里的 ​getElementById('title')​,其实也没问题,但是看着就很怪。 

在Vue中,使用了一个新关键字来代替 id , 叫 ref ,使用起来更方便;

<template>
<div>
<img src="./assets/logo.png" alt="logo">
<h1 v-text="msg" ref="title"></h1>
<button @click="showDOM">点我输入h1的DOM</button>
<school/>
</div>
</template>

<script>
// 引入组件
import school from './components/school.vue'

export default {
name:'app',
components:{
school,
},
data(){
return{
msg:'欢迎学习Vue!'
}
},
methods:{
showDOM(){
console.log('@@@',this.$refs.title);
}
}
}
</script>

提示,代码只改了两处:

1),在 h1 标签上加了 ​ref="title"​ ; 

2),调用 ref 时,使用 Vue 自身体的 ​.$refs​ 方法;

Vue2(笔记27) - 脚手架 - ref属性

可以把几个标签上都定义 refs ,再看看 VC 实例上的显示;

<template>
<div>
<img src="./assets/logo.png" alt="logo" ref="logo">
<h1 v-text="msg" ref="title" id="title"></h1>
<button @click="showDOM" ref="btn">点我输入h1的DOM</button>
<school ref="sch"/>
</div>
</template>

<script>
// 引入组件
import school from './components/school.vue'

export default {
name:'app',
components:{
school,
},
data(){
return{
msg:'欢迎学习Vue!'
}
},
methods:{
showDOM(){
console.log('@@@',this,this.$refs);
}
}
}
</script>

提示:给img,h1,btutton,还有组件 school 上都绑定了 ref;

给哪元素加上 ref ,VC就会替我们收集这些 ref 的元素;

看效果:

Vue2(笔记27) - 脚手架 - ref属性

调用的时候只需要: 

this.$refs.title // 真实DOM元素
this.$refs.logo // 真实DOM元素
this.$refs.btn // 真实DOM元素
this.$refs.sch // school 组件的实例对象(vc)

Vue2(笔记27) - 脚手架 - ref属性

这样就可以完整的输出几个被定义了 refs 的元素;

注意:this.$refs.sch  是 school 组件,返回的就是 school 组件的 VC 实例;


在原生JS中,选择DOM使用id;在VUE中,选择 DOM 使用 ref;

给标签元素加上 ref 和加上 id 看起来差异不大,但是给 组件加上 ref 和 id 的效果可就不一样了;

<school ref="sch" id ="sch"/>

给 school 分别打上 ref 和 id 的属性,再输出结果看一下:

console.log('@@@',this.$refs.sch);
console.log('@@@',document.getElementById('sch'));

Vue2(笔记27) - 脚手架 - ref属性

使用 id 拿到的元素是 school 组件里的 html ;


ref属性总结

1)被用来给元\素或子组件注册引用信息(id的替代者);

2)应用在html标签上获得的是真实DOM元素,应用在组件标签上是组件实例对象(VC)

3)使用方式

1、打标识:<h1 ref="xxx">...</h1>  或 <school ref="xxx">...</school>

2、获取: ​​this.$refs.xxx​​ ;