玩转Vue_Webpack中使用router

安装vue-router

cnpm i vue-router -S

image.png

GoodsList.vue

<template>
    <div>
        <h1>这是 GoodsList 组件</h1>
    </div>
</template>

Account.vue

<template>
    <div>
        <h1>这是 Account 组件</h1>
    </div>
</template>

main.js

// 注意:这里导入的Vue功能不完整,并没有提供像网页中使用那样的全部功能
import Vue from 'vue'
// 导入App组件
import App from './App.vue'
// 1.导入VueRouter包
import VueRouter from 'vue-router'
// 2.手动安装VueRouter
Vue.use(VueRouter)

// 导入组件模块
import account from './main/Account.vue'
import goodslist from './main/GoodsList.vue'


// 3.创建路由对象
const router = new VueRouter({
    routes : [
        // account goodlist
        {path : '/account',component : account},
        {path : '/goodslist',component : goodslist},
    ]
})

var vm = new Vue({
    el : '#app',
    data : {},
    // 注意:这里不要使用components注册组件,选择使用render函数
    render : c => c(App),
    router,// 4.将router对象赋给vm实例
})

注意:路由路径匹配规则以为着有 router-linkrouter-view,那么它们在哪里呢?
因为我们使用render函数将App.vue组件渲染进了index.html中的<div id="app"></div>中,App.vue会覆盖<div id="app"></div>中写的所有内容,所以我们只需要在App.vue中补写切换组件代码即可
App.vue

<template>
    <div>
        <h1>这是 App 组件</h1>
        <router-link to="/account">account组件</router-link>
        <router-link to="/goodslist">account组件</router-link>

        <router-view></router-view>
    </div>
</template>

<script>

</script>

<style>
    
</style>

运行cnpm run dev查看

webpack实现子路由

准备自组件

image.png

Login.vue

<template>
    <div>
        <h3>这是 Account -- 登录 子组件</h3>
    </div>
</template>

Register.vue

<template>
    <div>
        <h3>这是 Account -- 注册 子组件</h3>
    </div>
</template>

Account.vue

<template>
    <div>
        <h1>这是 Account 组件</h1>
        <router-link to="/account/login">登录</router-link>
        <router-link to="/account/register">注册</router-link>

        <router-view></router-view>
    </div>
</template>

main.js

// 注意:这里导入的Vue功能不完整,并没有提供像网页中使用那样的全部功能
import Vue from 'vue'
// 导入App组件
import App from './App.vue'
// 1.导入VueRouter包
import VueRouter from 'vue-router'
// 2.手动安装VueRouter
Vue.use(VueRouter)

// 导入组件模块
import account from './main/Account.vue'
import goodslist from './main/GoodsList.vue'

// 导入自组件
import login from './subcomponents/Login.vue'
import register from './subcomponents/Register.vue'


// 3.创建路由对象
const router = new VueRouter({
    routes : [
        // account goodlist
        {
            path : '/account',
            component : account,
            children : [
                { path : 'login' , component : login},
                { path : 'register' , component : register},
            ]
        },
        {path : '/goodslist',component : goodslist},
    ]
})

var vm = new Vue({
    el : '#app',
    data : {},
    // 注意:这里不要使用components注册组件,选择使用render函数
    render : c => c(App),
    router,
})

运行cnpm run dev查看

样式style的处理

<template>
    <div>
        <h3>这是 Account -- 登录 子组件</h3>
    </div>
</template>

<style scoped lang="sass"> /* scoped的意思是 样式 只作用于当前组件,lang的意思是语言,因为除了css还有sass等语法 */
    div{
        color:red;
    }
</style>

抽离路由模块

现在在我们的项目中main.js比较庞杂,我们应该把路由部分抽离成单独的js文件

image.png

router.js

import VueRouter from 'vue-router'
// 导入组件模块
import account from './main/Account.vue'
import goodslist from './main/GoodsList.vue'

// 导入自组件
import login from './subcomponents/Login.vue'
import register from './subcomponents/Register.vue'


// 3.创建路由对象
const router = new VueRouter({
    routes : [
        // account goodlist
        {
            path : '/account',
            component : account,
            children : [
                { path : 'login' , component : login},
                { path : 'register' , component : register},
            ]
        },
        {path : '/goodslist',component : goodslist},
    ]
})

export default router // 将router对象暴露出去

main.js

// 注意:这里导入的Vue功能不完整,并没有提供像网页中使用那样的全部功能
import Vue from 'vue'
// 导入App组件
import App from './App.vue'
// 1.导入VueRouter包
import VueRouter from 'vue-router'
// 2.手动安装VueRouter
Vue.use(VueRouter)

// 导入router模块
import router from './router.js'

var vm = new Vue({
    el : '#app',
    data : {},
    // 注意:这里不要使用components注册组件,选择使用render函数
    render : c => c(App),
    router,
})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • vue-cli搭建项目 确保安装了node与npm 再目标文件夹下打开终端 执行cnpm i vue-cli -g...
    Akiko_秋子阅读 3,366评论 1 22
  • 本文基于工作项目开发,做的整理笔记因工作需要,项目框架由最初的Java/jsp模式,逐渐转移成node/expre...
    SeasonDe阅读 7,543评论 3 35
  • 第一节 vue:读音: v-u-eview vue和angular区别?vue——简单、易学指令以 v-xxx一片...
    黑色的五叶草阅读 1,201评论 0 1
  • 第一个 vue-router 路由 路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示hom...
    索伦x阅读 2,531评论 0 3
  • MVVM Vue的指令 基本概念: Vue中指令都是以v-xx开头,指令的作用,最终都是拿着数据,渲染我们指令标签...
    getElementsByMK阅读 1,934评论 0 2

友情链接更多精彩内容