🥦 Vue ref属性
2025-01-22 08:19:30    635 字   
This post is also available in English and alternative languages.

ref 是 Vue 中的一个特殊属性,它用于给元素或组件注册一个引用。在 Vue 实例中,可以使用 ref 来引用DOM元素或子组件,并在需要的时候直接访问它们。


1. 在HTML标签中使用

给 HTML 标签加上 ref 属性并指定属性名,就可以在 Vue 中通过 vm 实例的 $refs 属性获取到对应的 ref 属性值的标签。

  • person.vue(person组件)

    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
    <template>
    <div id="temp">
    <h2>{{ myName }}</h2>
    <h2>{{ mySex }}</h2>
    <h2>{{ myAge }}</h2>
    <h2>{{ myJob }}</h2>
    <h2>{{ myAddress }}</h2>
    </div>
    </template>

    <script>
    export default {
    name: '
    ',
    data() {
    return {
    myName: '123ccc',
    mySex: 'man',
    myAge: 20,
    myJob: 'engineer',
    myAddress: 'nanjing'
    };
    },
    }
    </script>

    <style scoped lang="scss">
    // ...
    </style>
  • App.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
    <template>
    <div id="app">
    <h2 ref="content">测试页面</h2>
    <PersonComponent></PersonComponent>
    <button @click="getDomData">获取DOM结构</button>
    </div>
    </template>

    <script>

    import PersonComponent from "@/components/person.vue";

    export default {
    name: 'App',
    components: {
    PersonComponent
    },
    methods: {
    getDomData() {
    console.log(this.$refs.content)
    },
    }
    }
    </script>

    <style>
    // ...
    </style>
在HTML标签中使用

2. 在组件标签中使用

在组件标签中添加 ref,通过 $refs 拿到的是子组件的实例对象 VueComponent。

  • person.vue(person组件)

    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
    <template>
    <div id="temp">
    <h2>{{ myName }}</h2>
    <h2>{{ mySex }}</h2>
    <h2>{{ myAge }}</h2>
    <h2>{{ myJob }}</h2>
    <h2>{{ myAddress }}</h2>
    </div>
    </template>

    <script>
    export default {
    name: 'PersonComponent',
    data() {
    return {
    myName: '123ccc',
    mySex: 'man',
    myAge: 20,
    myJob: 'engineer',
    myAddress: 'nanjing'
    };
    },
    }
    </script>

    <style scoped lang="scss">
    // ...
    </style>
  • App.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
    <template>
    <div id="app">
    <h2 ref="content">测试页面</h2>
    <PersonComponent ref="person"></PersonComponent>
    <button @click="getDomData">获取DOM结构</button>
    <br>
    <br>
    <button @click="getDomData2">获取DOM接口2</button>
    </div>
    </template>

    <script>

    import PersonComponent from "@/components/person.vue";

    export default {
    name: 'App',
    components: {
    PersonComponent
    },
    methods: {
    getDomData() {
    console.log(this.$refs.content)
    },
    // 通过ref,获得了子组件本身的VueComponent
    getDomData2() {
    console.log(this.$refs.person)
    },
    }
    }
    </script>

    <style>
    // ...
    </style>
在组件标签中使用