vue3 表單搜索內(nèi)容回顯到地址欄的實(shí)例代碼
vue3 表單搜索內(nèi)容回顯到地址欄
地址欄輸入內(nèi)容回顯到form表單,同理表單輸入內(nèi)容也要回顯到地址欄中
<el-form :model="data"> <el-form-item label="ORCHID:"> <el-input type="text" v-model="data.orchId" placeholder="請(qǐng)輸入ORCHID" @keyup.enter="handleSearch" clearable /> </el-form-item> <el-form-item label="TASKID:"> <el-input type="text" v-model="data.taskId" placeholder="請(qǐng)輸入TASKID" @keyup.enter="handleSearch" clearable /> </el-form-item> <el-form-item label="WORKFLOWID:"> <el-input type="text" v-model="data.workflowId" placeholder="請(qǐng)輸入WORKFLOWID" @keyup.enter="handleSearch" clearable /> </el-form-item> <div> <el-form-item> <el-button class="btn-demo-item" @click="handleReset">重置</el-button> <el-button class="btn-demo-item" type="primary" @click="handleSearch" >查詢</el-button > </el-form-item> </div> </el-form>
import { ref, watchEffect } from "vue"; import { useRoute, useRouter } from "vue-router"; let props = defineProps({ modelValue: { type: Object, required: true, }, }); const data = ref({ orchId: props.modelValue.orchId ?? "", taskId: props.modelValue.taskId ?? "", workflowId: props.modelValue.workflowId ?? "", }); const route = useRoute(); const router = useRouter(); let emit = defineEmits(["search"]); const handleReset = () => { resetForm(data.value); handleSearch(); }; const handleSearch = () => { router.push({ query: { ...route.query, ...data.value } }); emit("search", data.value); }; watchEffect(() => { data.value = { orchId: route.query.orchId || "", taskId: route.query.taskId || "", workflowId: route.query.workflowId || "", }; });
Vue3根據(jù)搜索框內(nèi)容跳轉(zhuǎn)至本頁面指定位置
需求
需求:根據(jù)搜索框內(nèi)容跳轉(zhuǎn)至本頁面指定位置
搜索框是我們?cè)陂_發(fā)各類項(xiàng)目中出現(xiàn)率很高的一個(gè)"組件",在element-plus中名為"自動(dòng)補(bǔ)全輸入框",即我們可以根據(jù)輸入的內(nèi)容去檢索列表或者表格或者其他本頁面出現(xiàn)的元素,那我們應(yīng)該如何去實(shí)現(xiàn)這個(gè)行為呢?
思路
整體過程是這樣的:點(diǎn)擊輸入框的內(nèi)容,頁面跳轉(zhuǎn)至指定的內(nèi)容位置
實(shí)現(xiàn)過程
①首先我們必須要在頁面中引入自動(dòng)補(bǔ)全輸入框組件
template部分 <el-autocomplete v-model="state1" :fetch-suggestions="querySearch" class="inline-input w-50" placeholder="搜索" @select="handleSelect" @change='change'> </el-autocomplete> srcipt部分 import { onMounted, ref } from 'vue' interface RestaurantItem { value: string link: string } const state1 = ref('') const restaurants = ref<RestaurantItem[]>([]) const querySearch = (queryString: string, cb: any) => { const results = queryString ? restaurants.value.filter(createFilter(queryString)) : restaurants.value // call callback function to return suggestions cb(results) } const createFilter = (queryString: string) => { return (restaurant: RestaurantItem) => { return ( restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0 ) } } const loadAll = () => { return [ { value: 'vue', link: 'https://github.com/vuejs/vue' }, { value: 'element', link: 'https://github.com/ElemeFE/element' }, { value: 'cooking', link: 'https://github.com/ElemeFE/cooking' }, { value: 'mint-ui', link: 'https://github.com/ElemeFE/mint-ui' }, { value: 'vuex', link: 'https://github.com/vuejs/vuex' }, { value: 'vue-router', link: 'https://github.com/vuejs/vue-router' }, { value: 'babel', link: 'https://github.com/babel/babel' }, ] } const handleSelect = (item: RestaurantItem) => { console.log(item) } onMounted(() => { restaurants.value = loadAll() })
需要解釋的是組件中的這個(gè)事件select 點(diǎn)擊選中建議項(xiàng)時(shí)觸發(fā)handleSelect 則是手動(dòng)觸發(fā)選中建議事件
這一項(xiàng)是"點(diǎn)擊輸入框內(nèi)容"
②根據(jù)選中的內(nèi)容,在對(duì)應(yīng)的表格中查找
const handleSelect = (item: RestaurantItem) => { console.log(item) }
在這個(gè)函數(shù)中,我們可以log item,可以發(fā)現(xiàn)item就是loadAll中的內(nèi)容,我們可以給loadAll里的內(nèi)容都綁定一個(gè)id值,例如
{ id:1,value: 'vue', link: 'https://github.com/vuejs/vue' },
然后我們?cè)趯?duì)應(yīng)的表格的內(nèi)容也添加一個(gè)id,這里就不舉例了,至此,我們可以判斷,如果loadAll里的id==表格里某一項(xiàng)的id,那就是我們需要的對(duì)象
for(let i=0;i<表格長度;i++){ let id = 表格[i].id if (item.id == 表格[i].id) { document.getElementById(id).scrollIntoView(); }
③跳轉(zhuǎn)
document.getElementById(id).scrollIntoView();
整體的實(shí)現(xiàn)思路是:拿到搜索框選中的內(nèi)容的id,與此同時(shí)給表格中的每一項(xiàng)內(nèi)容都添加id,然后在select事件中,利用for循環(huán)去尋找搜索框id==表格內(nèi)容id的對(duì)象,最后是利用scrollIntoView()方法進(jìn)行跳轉(zhuǎn)
補(bǔ)充內(nèi)容
需要補(bǔ)充的是,如何獲取到對(duì)應(yīng)的元素?一是v-for循環(huán),給每個(gè)對(duì)象添加id,格式是 v-for = value in 表格 :id="value.id"
二是通過綁定ref函數(shù)獲取
到此這篇關(guān)于vue3 表單搜索內(nèi)容回顯到地址欄的文章就介紹到這了,更多相關(guān)vue3表單搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-cli axios請(qǐng)求方式及跨域處理問題
這篇文章主要介紹了vue-cli axios請(qǐng)求方式及跨域處理問題,文中還給大家提到了vue中axios解決跨域問題和攔截器使用,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-03-03vue中vxe-table虛擬滾動(dòng)列表的使用詳解
vxe-table 是一個(gè)功能強(qiáng)大的 Vue 表格組件,它支持虛擬滾動(dòng)列表作為其核心功能之一,本文主要介紹一下vxe-table的虛擬滾動(dòng)列表功能的使用場(chǎng)景和優(yōu)勢(shì),感興趣的可以了解下2023-12-12Vue?2源碼解析ParseHTML函數(shù)HTML模板
這篇文章主要為大家介紹了Vue?2源碼解析ParseHTML函數(shù)HTML模板詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Electron-vue腳手架改造vue項(xiàng)目的方法
這篇文章主要介紹了Electron-vue腳手架改造vue項(xiàng)目的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10Vue頁面內(nèi)公共的多類型附件圖片上傳區(qū)域并適用折疊面板(示例代碼)
本文中實(shí)現(xiàn)的附件上傳區(qū)域支持超多類型附件分類型上傳,并且可根據(jù)特定條件具體展示某些類型的附件上傳,本文給大家分享Vue頁面內(nèi)公共的多類型附件圖片上傳區(qū)域并適用折疊面板的示例代碼,需要的朋友參考下吧2021-12-12vue 地圖可視化 maptalks 篇實(shí)例代碼詳解
這篇文章主要介紹了vue 地圖可視化 maptalks 篇,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05vue使用echarts實(shí)現(xiàn)地圖的方法詳解
這篇文章主要為大家詳細(xì)介紹了vue使用echarts實(shí)現(xiàn)地圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03