Vue-router: 直接引用与使用vue-cli

1.直接在js中引入vue-router的cdn,并且不使用vue-cli、单文件组件等的方式,即最简单的路由实现,但是功能似乎大部分都齐了,

比较简单,所以直接上代码,已经测试过能够正常运行~

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
</head>
<body>
    <div id="app">
        <h1>Hello !</h1>
        <p>
          <!-- 使用 router-link 组件来导航. -->
          <!-- 通过传入 `to` 属性指定链接. -->
          <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
          <router-link to="/hash1">切换至com1</router-link>
          <router-link to="/hash2">切换至com2</router-link>
        </p>
        <!-- 路由出口 -->
        <!-- 路由匹配到的组件将渲染在这里 -->
        <router-view></router-view>
        <!-- router-link上的其他属性: -->
        <!-- 设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录。 -->
        <!-- <router-link :to="{ path: '/abc'}" replace></router-link> -->
        <!-- 有时候想要 <router-link> 渲染成某种标签,例如 <li>。 于是我们使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航。 -->
        <!-- <router-link to="/foo" tag="li">foo</router-link> -->
        <!-- active-class 设置 链接激活时使用的 CSS  -->
        <!-- event 声明可以用来触发导航的事件。可以是一个字符串或是一个包含字符串的数组。 -->
    </div>
</body>
<script>
    // 1. 定义(路由)组件。
    const com1 = { template: '<div>路由1</div>' }
    const com2 = { template: '<div>路由2</div>' }
    
    // 2. 定义路由
    // 每个路由应该映射一个组件。 其中"component" 可以是 通过 Vue.extend()
    //  创建的组件构造器, 或者,只是一个组件配置对象.
    const routes = [
    { path: '/hash1', component: com1 },
    { path: '/hash2', component: com2 }
    ]
    
    // 3. 创建 router 实例,然后传 `routes` 配置
    const router = new VueRouter({
    routes // (缩写)相当于 routes: routes
    })
    
    // 4. 创建和挂载根实例。
    // 要通过 router 配置参数注入路由,从而让整个应用都有路由功能
    const app = new Vue({
    router
    }).$mount('#app');//el是自动挂载,mount是手动挂载(延时)
    
</script>
</html>

 

 

2.使用vue-cli构建:

Vue init webpack <demoname>,然后注意在router项中选yes。

在src/router/index.js中进行路由的配置,在components文件夹下存储路由出口的组件

在app.vue中设定router-link、router-view(用法在上面提到了)

在main.js中全局注册组件以及挂载实例

这个例子中只有三个路由出口,helloworld、comA以及comB

index.js

import Vue from 'vue'
//引入router
import Router from 'vue-router'
//加载路由的出口,即组件
import HelloWorld from '../components/HelloWorld'
import comA from '../components/comA.vue'
import comB from '../components/comB.vue'
import hw from '../components/HelloWorld.vue'

Vue.use(Router)
//也可以在上面配置路由然后导出routes
export default new Router({
  routes: [
    {
      path:'/',
      name:'hw',
      component:hw
    },
    {
      path:'/hash1',
      name:'comA',
      component:comA
    },
    {
      path:'/hash2',
      name:'comB',
      component:comB
    }
  ]
})

注意routes中路由对象的component属性不能是字符串格式哦

main.js:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import comA from './components/comA'
import comB from './components/comB'
import hw from './components/HelloWorld'
//全局注册组件
Vue.component('comA',comA);
Vue.component('comB',comB);
Vue.component('hw',hw);

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

App.Vue:

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <div class="container">
      <ul>
        <li v-for="(com) in coms" :key="com.routerName">
          <router-link :to="{ name:com.routerName }">
            To {{ com.routerName }}
          </router-link>
        </li>
      </ul>
    </div>
    <div class="output">
      <router-view></router-view>
    </div>
  </div>
</template>

<script>

import helloWorld from './components/HelloWorld'
import comA from './components/comA'
import comB from './components/comB'
import hw from './components/HelloWorld'
export default {
  name: 'App',
  data(){
    return {
      coms:[{
      routerName:'comA',
      name:'comA'
    },
    {
      routerName:'comB',
      name:'comB'
    },{
      routerName:'hw',
      name:'hw'
    }]
    }
  },
  components:{
    comA,
    comB
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

在默认采用的hash模式下,vue-router的工作流程是当渲染出来的<a>(或者使用tag属性更改的其他标签)被点击时,根据其to属性决定前往的组件,同时将path属性添加到url后(多个#)

如果明天面试没过就回来把嵌套路由啊啥的给写了

猜你喜欢

转载自www.cnblogs.com/linbudu/p/11127342.html