在Vue中使用ref可以獲取到組件、dom元素或者模板中的某個子元素。在實際開發中,ref可以用來處理表單驗證、獲取子組件或者綁定事件等場景。
使用ref的基本語法是在組件或者dom元素上使用v-bind指令,然后傳入ref參數。
// 組件 Vue.component('my-component', { template: 'Hello from MyComponent!' }) // 在組件中使用ref// 在Vue實例中使用$refs獲取組件 this.$refs.myComponent // 返回組件實例 // dom元素// 獲取dom元素 this.$refs.myDiv // 返回dom元素
使用ref獲取子組件時,需要注意的是必須在子組件渲染之后才能獲取到子組件的實例。因為子組件是在父組件渲染之后才會被渲染,如果在父組件中嘗試獲取子組件實例,那么可能會獲取到undefined。
// 父組件// 子組件Hello from ChildComponent!// 在父組件中獲取子組件 mounted() { console.log(this.$refs.childComponent) // 此時可以正確獲取到子組件實例 }
使用ref獲取dom元素時,需要注意的是如果dom元素在v-if、v-for等指令中,則需要在dom元素渲染之后才能獲取到dom元素。因為v-if、v-for等指令有可能會延遲渲染或者不渲染dom元素。
// 在v-if中使用refHello World!// 在dom元素渲染之后獲取ref this.$nextTick(() =>{ console.log(this.$refs.myDiv) // 此時可以正確獲取到dom元素 })
除了在組件或者dom元素中使用ref獲取實例或者dom元素之外,還可以在模板中使用ref獲取子模板。
// 父模板// 子模板Hello from ChildTemplate!// 在父模板中獲取子模板 mounted() { console.log(this.$refs.childTemplate) // 此時可以正確獲取到子模板 }
總之,在Vue中使用ref可以獲取到很多對象,包括組件、dom元素、模板等。但是需要注意的是,在獲取子組件和dom元素時需要等待子組件或dom元素渲染完成之后才能獲取到。