每种技术都有其利弊,单页应用也是如此。
缺点:
vue-router.js是Vue.js官方的路由插件用于构建单页面应用。
vue的单页应用是基于路由和组件的。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单面应用中,则是路径之间的切换,也就是组件的切换。
先来看一下官方提供的最简单的例子:示例
HTML
<script src="https://unpkg.com/vue/dist/vue.js">script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js">script>
<div id="app">
<h1>Hello App!h1>
<p>
<router-link to="/foo">Go to Foorouter-link>
<router-link to="/bar">Go to Barrouter-link>
p>
<router-view>router-view>
div>
JavaScript
// 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)
// 1. 定义(路由)组件。
// 也可以从其他文件 import 进来
const Foo = { template: 'foo' }
const Bar = { template: 'bar' }
// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
routes // (缩写)相当于 routes: routes
})
// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
router
}).$mount('#app')
// 现在,应用已经启动了!
JavaScript文件主要做的事情是:
以上只是教我们用最简单的方法使用vue-router。但实际开发过程中,首先我们的vue组件显然不会只有一个template模板这么简单,会用到vue的单文件组件;
其次我们通常会希望
既然是单页应用(SPA),那么整个项目有以下三个文件是必要的:
接下来 我们就创建两个自定义组件:index.vue和hello.vue。我们希望的结果是他们之间互相跳转。
我们利用官方提供的脚手架vue-cli
工具生成简单的一个基于webpack打包的vue项目
准备工作:
npm install webpack -g
npm install vue-cli -g
//打开要创建的项目路径目录,创建项目
vue init webpack-simple <项目名>
cd <项目名>
npm install vue-router --save
npm run dev
生成的vue项目如下图:
//index.vue
<template>
<div>
<h2>Indexh2>
<hr>
<p>{{sContent}}p>
div>
template>
<script>
export default{
data(){
return {
sContent:"This is index components"
}
}
}
script>
//hello.vue
<template>
<div>
<h2>Hello Vue.jsh2>
<hr/>
<p>{{sContent}}p>
div>
template>
<script>
export default{
data(){
return {
sContent:"This is hello components"
}
}
}
script>
//引入并安装vue-router插件
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
//引入index.vue和hello.vue组件
import App from './App.vue';
import index from './components/index.vue';
import hello from './components/hello.vue';
//定义路由
const routes = [
{path:'/',component:App},
{ path: '/index', component: index },
{ path: '/hello', component: hello }
]
//创建 router 实例,然后传 routes 配置
const router=new VueRouter({
routes
});
//创建和挂载根实例。通过 router 配置参数注入路由,从而让整个应用都有路由功能
new Vue({
el:"#app",
router
});
<template>
<div>
![](./assets/logo.png)
<h1>{{msg}}h1>
<ul>
<router-link to='/index' tag='li'><a href="/index">Indexa>router-link>
<router-link to='/hello' tag='li'><a href="/hello">Helloa>router-link>
ul>
div>
template>
<html lang="en">
<head>
<meta charset="utf-8">
<title>vue-webpack-simpletitle>
head>
<body>
<div id="app">
<router-view>router-view>
div>
<script src="/dist/build.js">script>
body>
html>
这样就会把渲染出来的页面挂载到这个id为app的div里了。 修改后运行的效果如下:
const routes = [
{ path: '/', redirect: '/index'}, // 这样进/ 就会跳转到/index
{ path: '/index', component: index }
]
const routes = [
{ path: '/index', component: index,
children: [
{ path: 'info', component: {template:'This is info component
'}}
]
}
]
const routes = [
{ path: '/index', component: index,
name:'index'
}
]
//to属性 string|object
<router-link to="home">Homerouter-link>
<a href="home">Homea>
<router-link v-bind:to="'home'">Homerouter-link>
<router-link :to="{ path: 'home' }">Homerouter-link>
<router-link :to="{ name: 'user', params: { userId: 123 }}">Userrouter-link>
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Registerrouter-link>
//replace属性 true|false 不留下 history 记录。
<router-link to="home" replace>Homerouter-link>
//append属性 true|false 追加路径
<router-link to="home" append >Homerouter-link>
//tag属性 string 设置渲染标签
<router-link to="/foo" tag="li">foorouter-link>
<li>fooli>
//active-class 属性 string 激活时使用的 CSS 类名
以上遍是vue-router基本使用方式了
更详细的vue-router功能请参考文档:https://router.vuejs.org/zh-cn/