vue-router 路由和组件

简介: vue-router 是 vue 中需要学习的一个重要部分, 下面我来与大家分享下自己的经验想了解更多组件的知识请看Vue 自定义组件以 饿了么APP 为例底部是我用 mint-ui 做成的公共组件, 取名为 "BottomTab"...

vue-router 是 vue 中需要学习的一个重要部分, 下面我来与大家分享下自己的经验

想了解更多组件的知识请看Vue 自定义组件

以 饿了么APP 为例
底部是我用 mint-ui 做成的公共组件, 取名为 "BottomTab"


首先我们来配置下公共组件 BottomTab, 代码如下 (mint-ui 引入需要单独配置, 这里不做详述)

<template>
    <mt-tabbar v-model="currentId" fixed>
        <mt-tab-item id="home">
            <!-- <img slot="icon" :src="[currentId == 'home' ? require('') : require('')]"> -->
            <img slot="icon" :src="currentId == 'home'">
            首页
        </mt-tab-item>
        <mt-tab-item id="discover">
            <!-- <img slot="icon" :src="[currentId == 'discover' ? require('') : require('')]"> -->
            <img slot="icon" :src="currentId == 'discover'">
            发现
        </mt-tab-item>
        <mt-tab-item id="order">
            <!-- <img slot="icon" :src="[currentId == 'order' ? require('') : require('')]"> -->
            <img slot="icon" :src="currentId == 'order'">
            订单
        </mt-tab-item>
        <mt-tab-item id="profile">
            <!-- <img slot="icon" :src="[currentId == 'profile' ? require('') : require('')]"> -->
            <img slot="icon" :src="currentId == 'profile'">
            我的
        </mt-tab-item>
    </mt-tabbar>
</template>

<script>
export default {
    name: "BottomTab",
    data() {
        return {
            currentId: "home"
        }
    },
    watch: {
        // 实现路由跳转
        currentId: function(val, oldVal) {
            this.$router.push("/" + val);
        }
    }
};
</script>

创建完组件之后, 接下来就是要将它引入到相应的页面中了
首先创建一个文件 main.vue 做为所有页面的主路由, 各个页面的公共模块都放在这个文件里面
然后将底部的公共组件引用到这个文件夹内, 组件首字母建议大写, 代码如下

<template>
    <div>
        <!-- 3. 在 template 中就可以直接使用了 -->
        <BottomTab></BottomTab>
    </div>
</template>

<script>
    // 1. 使用 import 导入想要引用的的子组件, 这里采用的是绝对路径
    import BottomTab from '@/components/common/BottomTab'

    export default {
        name: 'mainContent',
        components: {
            // 2. 在 components 中写入子组件
            BottomTab
        },
</script>

想实现路由之间相互跳转的话, 必须得先配置 router/index.js 文件
mainContent 为主路由; home discover order profile 为子路由, 对应跳转的四个页面, 代码如下

import Vue from 'vue'
import Router from 'vue-router'

// 主路由
const MainContent = resolve => require.ensure([], () => resolve(require('@/views/main.vue')), 'MainContent');

// 首页
const Home = resolve => require.ensure([], () => resolve(require('@/views/home/Home.vue')), 'Home'); // 首页

// 发现
const Discover = resolve => require.ensure([], () => resolve(require('@/views/discover/Discover.vue')), 'Discover'); // 发现

// 订单
const Order = resolve => require.ensure([], () => resolve(require('@/views/order/Order.vue')), 'Order'); // 订单

// 我的
const Profile = resolve => require.ensure([], () => resolve(require('@/views/profile/Profile.vue')), 'Profile'); // 我的

Vue.use(Router)

export default new Router({
    routes: [
        {
            path: '/',
            redirect: '/home' // 默认路径
        }, {
            //主路由
            path: '/main',
            name: 'mainContent',
            component: MainContent,
            children: [
                { 
                    // 首页
                    path: '/home',
                    name: 'home',
                    component: Home
                }, { 
                    // 发现
                    path: '/discover',
                    name: 'discover',
                    component: Discover
                }, { 
                    // 订单
                    path: '/order',
                    name: 'order',
                    component: Order
                }, { 
                    // 我的
                    path: '/profile',
                    name: 'profile',
                    component: Profile
                },
            ]
        },
    ]
})
  • router-view
    • 主要是构建 SPA (单页应用) 时,方便渲染你指定路由对应的组件。你可以 router-view 当做是一个容器,它渲染的组件是你使用 vue-router 指定的

路由配置完成后, 就要使用 router-view 进行渲染了 (只要有子路由, 就要用它来渲染)
进入前面创建好的文件 main.vue内, 代码如下

<template>
    <div>
        <BottomTab></BottomTab>
        <div class="main-content">
            <router-view></router-view>
        </div>
    </div>
</template>

然后进入页面看一下效果, 是否配置成功


相关文章
|
6月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
540 2
|
9月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1001 0
|
11月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1238 4
|
9月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
9月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件的实现代码:支持自定义表情库、快捷键发送和输入框联动的聊天表情解决方案
本文详细介绍了在 Vue 项目中实现一个功能完善、交互友好的表情包输入组件的方法,并提供了具体的应用实例。组件设计包含表情分类展示、响应式布局、与输入框的交互及样式定制等功能。通过核心技术实现,如将表情插入输入框光标位置和点击外部关闭选择器,确保用户体验流畅。同时探讨了性能优化策略,如懒加载和虚拟滚动,以及扩展性方案,如自定义主题和国际化支持。最终,展示了如何在聊天界面中集成该组件,为用户提供丰富的表情输入体验。
665 8
|
9月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
489 1
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
645 161
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
1049 159
|
11月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
899 6

热门文章

最新文章