为啥我的 Vue js 应用在路由到其他组件时会失去焦点?

Posted

技术标签:

【中文标题】为啥我的 Vue js 应用在路由到其他组件时会失去焦点?【英文标题】:Why does my Vue js app lose focus when routing to other components?为什么我的 Vue js 应用在路由到其他组件时会失去焦点? 【发布时间】:2020-04-11 05:22:09 【问题描述】:

我有一个 vuejs 应用程序,在更改路线时会失去焦点。当站点加载标题组件的第一个元素时,这是我想要的焦点(完美)。但是,当我导航到网站上的任何其他链接并点击选项卡时,焦点永远不会转到标题组件。 如果我删除页脚,页面会像它应该的那样关注页眉组件。当我添加页脚时,焦点会中断?

我尝试在每个组件被销毁(beforeDestroy)之前专注于另一个区域,但这不起作用。我还尝试向模板添加更多 div 以及专注于组件,但没有奏效。

我需要使用观察者吗?

我的临时解决方案是重新加载页面两次,这很有效,但很俗气,因为 API 被调用了两次。

任何帮助将不胜感激。

路由器正在这样加载...

Vue.use(Router)

export default new Router(
routes: [

  path: '/',    
  component: landingPage,  //works fine
  , 
   path: '/home', component: HomePage , //does not load properly
   path: '/search', component: SearchPage , //does not load properly
   path: '/about', component: AboutPage  //does not load properly

下面是模板,以及组件的加载...

<template>
 <div>
   <my-header/>
   <router-view  />
   <my-footer/>
 </div>
</template>

<script>
import mylayout from 'my-layout'
import '../node_modules/my-layout/dist/my-layout.css'

export default 
 components: 
  'my-header': mylayout.components['my-header'],  
  'my-footer': mylayout.components['my-footer']
 ,

name: 'app',
data: function () 
 return 
  state: 'initial'
 
,


beforeCreate: function () 
 // `this` points to the vm instance
  console.log('app before create')
 ,
created: function () 
 // `this` points to the vm instance
console.log('app created')
,
beforeMount: function () 
// `this` points to the vm instance
console.log('app before mount')
,
 mounted: function () 
 // `this` points to the vm instance
 console.log('app mounted')
,
beforeDestroy: function () 
 // `this` points to the vm instance
 console.log('app before destroy')
,
destroyed: function () 
// `this` points to the vm instance
console.log('app destroyed')
 

</script>

【问题讨论】:

【参考方案1】:

目前看来焦点管理不是 Vue Router 开发人员的首要任务。他们承认这些限制,但issue 已经很老了,而且它的活动不是那么好。

您可以尝试解决这个by yourself 或使用router library 量身定制来解决这个问题....

【讨论】:

以上是关于为啥我的 Vue js 应用在路由到其他组件时会失去焦点?的主要内容,如果未能解决你的问题,请参考以下文章

django & Vue.js:为啥我的 VueJs 组件没有显示在前端?

为啥 vue.js 在 html 文件中不起作用?

如何通过使用 Vue.js 中的路由器概念单击按钮来简单地从一个组件(主页)导航到另一个组件

js跳转vue

Vue下路由History mode导致页面无法渲染的原因

如何将 Vue.js 范围样式应用于通过视图路由器加载的组件?