chaihongjun.me

[Vue]入门学习之十八Vue的路由初识

通过@vue/cli脚手架构建demo:

//main.js
// 脚手架入口文件
// 初始化Vue和路由等实例,以及加载需要的插件等等
import Vue from 'vue'
//导入最顶层的父组件app.vue
import App from './App.vue'
//引入 router.js文件
import router from './router'
Vue.config.productionTip = false
new Vue({
    router,
    render: h => h(App)
}).$mount('#app')
//router.js
//路由配置文件,需要的组件都需要import
import Vue from 'vue'
//引入官方路由
import Router from 'vue-router'
//其他页面组件(除了主页)都需要引入
import Home from './views/Home.vue'
import HelloWorld from './components/HelloWorld.vue'
// 明确安装使用路由
Vue.use(Router)
//路由实例化,并配置路由
export default new Router({
    mode: "history",
    routes: [{
            path: '/',
            name: 'home',
            component: Home
        },
        {
            path: '/about',
            name: 'about',
            // route level code-splitting
            // this generates a separate chunk (about.[hash].js) for this route
            // which is lazy-loaded when the route is visited.
            component: () => import( /* webpackChunkName: "about" */ './views/About.vue')
        },
        {
            path: '/helloWorld',
            name: 'helloWorld',
            component: HelloWorld
        },
    ]
})
<!-- App.vue 主组件 -->
<template>
    <div id="app">
        <div id="nav">
            <!--  router-link 用来创建导航,to 选项为导航链接 -->
           <!--  router-link 还有其他一些属性,可以查看相关API -->
            <router-link to="/" tag="li" replace active-class="home"><a>Home</a></router-link>
            <router-link to="/about" tag="li" active-class="about"> <a>About</a></router-link>
            <router-link to="/helloWorld" tag="li" active-class="helloWorld"> <a>HelloWorld</a></router-link>
        </div>
        <!-- router-view组件用来渲染激活的路由内容 -->
        <router-view></router-view>
    </div>
</template>
<style>
#app {
    font-family: 'Avenir', Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-align: center;
    color: #2c3e50;
}

#nav {
    padding: 30px;
}

#nav a {
    font-weight: bold;
    color: #2c3e50;
}

#nav a.router-link-exact-active {
    color: #42b983;
}

li {
    list-style-type: none;
}
</style>
<!-- home.vue -->
<template>
    <div class="home">
        <img alt="Vue logo" src="../assets/logo.png">
        <HelloWorld msg="Welcome to Your Vue.js App" />
    </div>
</template>
<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
export default {
    name: 'home',
    components: {
        HelloWorld
    }
}
</script>
<!-- HelloWorld.vue -->
<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <p>
      For guide and recipes on how to configure / customize this project,<br>
      check out the
      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
    </p>
    <h3>Installed CLI Plugins</h3>
    <ul>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
    </ul>
    <h3>Essential Links</h3>
    <ul>
      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
    </ul>
    <h3>Ecosystem</h3>
    <ul>
      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>
<!-- About.vue -->
<template>
  <div class="about">
    <h1>这个是关于页面</h1>
  </div>
</template>

路由实例化之后,需要配置routes选项,配置路径和对应的组件等信息。配置选项:https://router.vuejs.org/zh/api/#routes

知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»