我正在创建一个小的Vue webapp,我想在这里创建一个锚标签.

我给div个锚定标签中的一个打了id分,比如:

<div id="for-home">
   ....
</div>

这是我的路由配置:

export default new Router({
  abstract: true,
  mode: 'history',
  scrollBehavior: () => ({ y: 0 }),
  routes: [
    { path: '/', component: abcView}
  ]
})

但有了这个锚定标签,有时有效,有时无效,我是否错过了一些东西?

推荐答案

我相信你是在问直接跳转到页面的某个特定区域,通过导航到页面中的锚定标签,比如#section-3.

要使其工作,您需要修改scrollBehavior函数,如下所示:

new VueRouter({
    mode: 'history',
    scrollBehavior: function(to, from, savedPosition) {
        if (to.hash) {
            return {selector: to.hash}
            //Or for Vue 3:
            //return {el: to.hash}
        } else {
            return { x: 0, y: 0 }
        }
    },
    routes: [
        {path: '/', component: abcView},
        // your routes
    ]
});

参考:https://router.vuejs.org/guide/advanced/scroll-behavior.html#async-scrolling

我试图创建一个JSFIDLE示例,但由于mode:'history'的原因,它不起作用.如果您复制代码并在本地运行,您将看到它是如何工作的:https://jsfiddle.net/mani04/gucLhzaL/

通过在scrollBehavior中返回{selector: to.hash}(或Vue 3中的{el: to.hash}),您将把锚标记哈希传递到下一个路由,该路由将导航到该路由中的相关部分(使用id标记).

Vue.js相关问答推荐

为什么发送 POST API 请求时主体对象没有react ?

在 Nuxt3 中使用 Vue3 vue-ganntastic 插件

Vue3外部数组的响应性

是否可以将 nuxt3 与类星体框架一起使用

如何在Vue js 3中根据API响应替换react 值

两个div元素之间的vue2过渡

查找未销毁的 Vue 组件

Defer推迟执行,直到外部脚本加载到 Vue.js

Vue子组件等待props

Vue动态mapGetters

有条件地在 Vue 中添加一个 CSS 类

W3C 验证和 Vue 的 HTML 绑定语法

如何使用 Vuejs 和 Laravel 获取当前经过身份验证的用户 ID?

包含 Vue 组件的 HTML 字符串的 Nuxt 渲染函数

从我的服务访问路由实例

删除一行后刷新 Bootstrap-Vue 表

如何在生产模式下为 chrome 扩展启用 Vue devtools?

Vue.js 中的 CSS 框架

如何在 vue.js 2 上循环对象观察者?

如何在 vue3 中的setup方法中发出事件?