Vue 中的 ref 是一个指令,它可以用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例。
Vue 中 ref 的使用方法有两种:
1. 作为一个属性值:new Vue({ el: '#app', methods: { getInputValue() { console.log(this.$refs.input.value) // 获取文本框的值 } } }) 2. 作为一个函数:new Vue({ // 父组件 el: '#app', methods: { getChildValue() { console.log(this.$refs.child) // 获取子组件实例对象 } } })// 子组件
在 Vue 2 中,在 v-for
里使用的 ref
attribute 会用 ref 数组填充相应的 $refs
property。当存在嵌套的 v-for
时,这种行为会变得不明确且效率低下。
在 Vue 3 中,这样的用法将不再在 $ref
中自动创建数组。要从单个绑定获取多个 ref,请将 ref
绑定到一个更灵活的函数上 (这是一个新特性):
<div v-for="item in list" :ref="setItemRef"></div>
结合选项式 API:
export default {
data() {
return {
itemRefs: []
}
},
methods: {
setItemRef(el) {
this.itemRefs.push(el)
}
},
beforeUpdate() {
this.itemRefs = []
},
updated() {
console.log(this.itemRefs)
}
}
结合组合式 API:
import { ref, onBeforeUpdate, onUpdated } from "vue"
export default {
setup() {
let itemRefs = []
const setItemRef = el => {
itemRefs.push(el)
}
onBeforeUpdate(() => {
itemRefs = []
})
onUpdated(() => {
console.log(itemRefs)
})
return {
itemRefs,
setItemRef
}
}
}
注意:
itemRefs
不必是数组:它也可以是一个对象,其 ref 会通过迭代的 key 被设置。itemRef
也可以是响应式的且可以被监听。信息这是一个低级的内部 API 更改,不会影响大多数开发人员。#概览下面是对这些变化的高层次总结:删除枚举 attribute 的内部概...
#概览从 Vue 3.0 开始,过滤器已删除,不再支持。#2.x 语法在 2.x,开发者可以使用过滤器来处理通用文本格式。例如:templateh1B...
Vue 2.x 有许多全局 API 和配置,这些 API 和配置可以全局改变 Vue 的行为。例如,要创建全局组件,可以使用 Vue.component 这样...
#概览对内联特性的支持已被移除。#2.x 语法在 2.x 中,Vue 为子组件提供了 inline-template attribute,以便将其内部内容用作模...