需求:点击搜索框跳转新页面然后自动获取焦点弹起键盘。
遇到的问题:
inputautofocus属性在android上可以,在ios上不兼容,ios为了安全起见,禁掉了。

解决方案:

  1. 使用子路由做新页面
    子页面撑满全屏,看起来是一个新页面,并且具有前后路由跳转的功能。
  2. 点击父页面的搜索框,跳转子页面的搜索框
  3. !!子页面的路由不能使用懒加载的方式 引入,会使自动获取焦点失效。

具体实施部分代码:

// router.js
import { createRouter, createWebHashHistory } from 'vue-router'
import SearchPage from '@/views/Search.vue'
const routes = [
	{
    path: '/planList',
    name: 'PlanList',
    component: () => import('@/views/PlanList.vue')
    children: [{
      path: 'planSearch',
      name: 'PlanSearch',
      component: SearchPage
    }]
  },
]
// 父页面 PlanList.vue
<template>
	<div class="input-box" @click="jumpInputSearch()">
	  <!-- <van-icon name="search" color="#c8c8c8" /> -->
	  <img class="search-icon" src="@/assets/img/public/search.png" />
	  <span>搜索姓名</span>
	</div>
	<router-view></router-view>
</template>
<script setup>
import { useRouter } from 'vue-router'
const route = useRouter()
const jumpInputSearch = () => {
	route.push({ name: 'PlanSearch' })
}
<script>
// 子页面 PlanList.vue
<template>
	<input type="text"
	   placeholder="搜索姓名"
	   v-model.trim="searchData"
	   v-focus>
</template>
<script>
export default {
directives: {
    focus: {
      // 指令的定义
      mounted (el) { // vue2: mounted改成inserted
        el.focus()
      }
    }
  }
}
</script>
Logo

前往低代码交流专区

更多推荐