在前端開發(fā)中,我們經(jīng)常會有輸入框自動聚焦的需求,例如登錄頁面的輸入框需要用戶直接輸入而不需要點(diǎn)擊。而Vue框架中,我們可以通過手動觸發(fā)focus事件實(shí)現(xiàn)這個功能。
首先,HTML中需要有需要聚焦的元素,這里我們以一個簡單的輸入框為例:
<input type="text" ref="myInput">
ref屬性是Vue框架提供的指令,可以為DOM元素添加一個名字,方便在Vue實(shí)例中訪問。在本例中,我們添加了名為“myInput”的ref屬性。
接下來在Vue實(shí)例中,我們可以通過$refs對象獲取到這個輸入框元素:
var vm = new Vue({ el: '#app', methods: { focusInput: function () { this.$refs.myInput.focus() } } })
在methods選項中,我們定義了一個名為“focusInput”的函數(shù),函數(shù)的作用是手動觸發(fā)輸入框的focus事件。在函數(shù)中,我們通過this.$refs.myInput獲取到了剛才添加的myInput元素,并調(diào)用它的focus()方法觸發(fā)了focus事件。
接下來,我們需要在需要自動聚焦的地方調(diào)用這個函數(shù)。例如在頁面加載完成后自動聚焦,可以在Vue生命周期函數(shù)中調(diào)用:
var vm = new Vue({ el: '#app', mounted: function () { this.focusInput() }, methods: { focusInput: function () { this.$refs.myInput.focus() } } })
在mounted生命周期函數(shù)中,我們調(diào)用了focusInput函數(shù),這樣在頁面加載完成后輸入框就會自動聚焦。
除了在頁面加載完成后自動聚焦,我們也可以在某些特定情況下手動觸發(fā)輸入框的focus事件。例如,在點(diǎn)擊某個按鈕后才觸發(fā)輸入框的focus事件:
var vm = new Vue({ el: '#app', methods: { focusInputOnClick: function () { this.focusInput(); }, focusInput: function () { this.$refs.myInput.focus() } } })
在這個例子中,我們定義了一個名為“focusInputOnClick”的函數(shù),這個函數(shù)在點(diǎn)擊按鈕時執(zhí)行。函數(shù)中,我們調(diào)用了另一個名為“focusInput”的函數(shù),這個函數(shù)和前面講過的一樣,是用于手動觸發(fā)輸入框的focus事件。
總結(jié)一下,通過上面的例子我們可以看到,在Vue框架中手動觸發(fā)focus事件非常簡單。只需要在HTML中為需要聚焦的元素添加一個ref屬性,在Vue實(shí)例中定義一個與ref名字相同的方法,然后在需要的地方調(diào)用這個方法即可。