vue路由封装

发布于 2022-09-12 03:59:35 字数 131 浏览 27 评论 0

image.png### 问题描述

头部导航区域封装公共代码 页面内有些需要在导航栏添加按钮 不想每个页面引入导航组件 请问该如何封装

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你的他你的她 2022-09-19 03:59:35

简单处理可以直接负margin盖上去

<app>
    <nav>
    <router-view/>
    
page1
    <div></div>
page2
    <div>
        <nav-btn style="margin-top: -100px"/>
    </div>
    

规范点可以在app中定义一个变量接受子组件传递的组件,然后用component展示这个组件

<app>
    <nav>
        <component :is="childCustomComponent"/>
    </nav>
    <router-view>

app provide一个方法给子组件注册这个childCustomComponent组件即可

// app.vue
export default {
    provide() {
        return {
            addNavButton(component) {
                this.childCustomComponent = component
            }
        }
    }
}

有需要的路由页面通过这个方法把组件传递给父页面

// child.vue
import NavBtn from "./children/NavBtn.vue"

export default {
    inject: ['addNavButton'],
    created() {
        this.addNavButton && this.addNavButton(NavBtn)
    }
}

这种在当前组件之外渲染内容的需求在vue3可以通过Portals组件实现.


更新

还有更简单的做法
在导航区域添加一个占位元素,给它一个id.

<app>
    <nav>
        <div id="nav-btn-target"></div>
    </nav>
    <router-view>

在有需要的页面添加子组件navBtn.vue,mounted时将该组件挂载到占位元素中

//navBtn.vue
export default {
    mounted() {
        document.getElementById('nav-btn-target').appendChild(this.$el)
    }
}

页面内正常引入,使用navBtn,它挂载时会挂到顶部导航栏中.需要注意的是,它在vNode树的层级是在页面组件之下的,这与上面的方式是不同的.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文