Vue路由使用以及参数传递

Vue路由使用以及参数传递

  • 安装

    • npm install vue-router
  • 简单操作使用

    1
    2
    3
    4
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    Vue.use(VueRouter)
  • vue-router操作使用分解

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div id="app">
    <h1>Hello App!</h1>
    <p>
    <!-- 使用 router-link 组件来导航,通过传入 `to` 属性指定链接,<router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
    </p>
    <!-- 路由出口,路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>
    </div>
  • 定义路由 每个路由即为一个组件

    1
    2
    3
    4
    const routes = [
    { path: '/foo', component: Foo },
    { path: '/bar', component: Bar }
    ]
  • 创建router实例

    1
    2
    3
    const router = new VueRouter({
    routes // (缩写)相当于 routes: routes
    })
  • 创建和挂载根实例

    1
    2
    3
    4
    const app = new Vue({
      el:'#app',
      router
    })
  • vue-router默认是hash模式,url:http://localhost:8000/#/hello
    如果想取消掉#,可以使用history模式,这样可以利用 history.pushState API完成url跳转无需重新加载页面

    1
    2
    3
    4
    const router = new VueRouter({
    mode: 'history',
    routes: [...]
    })

    那么url::http://localhost:8000/hello
    如果使用history模式,服务器端需要进行一些配置才可以,否则直接访问带参数的路由地址会返回404

    • 一些服务器端的配置

      • apache 需要修改配置
        在项目目录下新建.htaccess文件(跟index.html同级)

        1
        2
        3
        4
        5
        6
        7
        8
        <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /ibms/
        RewriteRule ^index\.html$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /ibms/index.html [L]
        </IfModule>

        记得重启apache服务器

      • nginx

        1
        2
        3
        location / {
        try_files $uri $uri/ /index.html;
        }
      • IIS服务器配置 注意:IIS需要安装重写工具

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        <?xml version="1.0" encoding="UTF-8"?>
        <configuration>
        <system.webServer>
        <rewrite>
        <rules>
        <rule name="ReactRouter" patternSyntax="ECMAScript" stopProcessing="true">
        <match url=".*" />
        <conditions>
        <add input="{HTTP_METHOD}" pattern="^GET$" />
        <add input="{HTTP_ACCEPT}" pattern="^text/html" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        </conditions>
        <action type="Rewrite" url="/index.html" />
        </rule>
        </rules>
        </rewrite>
        </system.webServer>
        </configuration>

      为了防止404报错信息,可以在路由中配置

      1
      2
      3
      4
      5
      6
      const router = new VueRouter({
      mode: 'history',
      routes: [
      { path: '*', component: NotFoundComponent }
      ]
      })
  • 重定向和别名

    • 重定向通过 routes 配置来完成,下面例子是从 /a 重定向到 /b

      1
      2
      3
      4
      5
      const router = new VueRouter({
      routes: [
      { path: '/a', redirect: '/b' }
      ]
      })

      重定向的目标也可以是一个命名的路由:

      1
      2
      3
      4
      5
      const router = new VueRouter({
      routes: [
      { path: '/a', redirect: { name: 'foo' }}
      ]
      })