vue—ref属性

原文链接:vue—ref属性 – 每天进步一点点

 

在vue中ref属性基本有两个作用,一个是获取dom元素,另一个是获取组件实例化对象。

初始页面和初始代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <h1 v-text="msg"></h1>
    <Student></Student>
  </div>
</template>
 
<script>
 
import Student from './components/Student'
 
export default {
  name: 'App',
  components: {
   
    Student
  },
  data() {
    return {
      msg:'欢迎'
    }
  },
}
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
1.获取dom元素

获取dom元素的方法很简单,比如我们可以用最原始的 方法获取dom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <h1 v-text="msg" id='h1'></h1>
    <button @click="showDom">点击我输出dom元素</button>
    <Student></Student>
  </div>
</template>
 
<script>
 
import Student from './components/Student'
 
export default {
  name: 'App',
  components: {
   
    Student
  },
  data() {
    return {
      msg:'欢迎'
    }
  },
  methods: {
    showDom(){
      console.log(document.getElementById('h1'))
    }
  },
}
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

这种最原始的方法可以将dom元素输出。

我们也可以用ref的方法进行操作,这是vue给我们提供的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <h1 v-text="msg" ref="h1"></h1>
    <button @click="showDom">点击我输出dom元素</button>
    <Student></Student>
  </div>
</template>
 
<script>
 
import Student from './components/Student'
 
export default {
  name: 'App',
  components: {
   
    Student
  },
  data() {
    return {
      msg:'欢迎'
    }
  },
  methods: {
    showDom(){
      console.log(this.$refs.h1)
    }
  },
}
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

2.获取组件实例对象

我们除了可以操作现有的标签,还可以操作我们自己创建的组件,比如上一篇文章创建的student组件,

我们将ref 属性加入到这个组件中,就可以输出整个组件的实例对象了,这个在后面的组件之间的通信有作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <h1 v-text="msg" ref="h1"></h1>
    <button @click="showDom">点击我输出dom元素</button>
    <Student ref="stu"></Student>
  </div>
</template>
 
<script>
 
import Student from './components/Student'
 
export default {
  name: 'App',
  components: {
   
    Student
  },
  data() {
    return {
      msg:'欢迎'
    }
  },
  methods: {
    showDom(){
      console.log(this.$refs.stu)
    }
  },
}
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

 

posted on   longkui  阅读(92)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示