Vue-路由学习
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h2><a id="_1"></a>什么是路由</h2>
-
后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;
-
前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;
-
在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);
在 vue 中使用 vue-router
使用tag属性指定router-link渲染的标签类型
<!-- router-link 默认渲染为一个a 标签 -->
<router-link to="/login" tag="span">登录</router-link>
<router-link to="/register">注册</router-link>
设置路由重定向
var router = new VueRouter({ routes: [ // 路由规则数组 //路由的重定向 { path: '/', redirect: '/login' }, { path: '/login', component: login }, { path: '/register', component: register } ],routes: [
linkActiveClass: 'myactive'
})
设置路由高亮(每次路由切换成功进入激活状态)
.router-link-active 是路由自带的样式类名
linkActiveClass: 'myactive' //将 .router-link-active 改为myactive

var router = new VueRouter({ routes: [ // 路由规则数组 { path: '/', redirect: '/login' }, { path: '/login', component: login }, { path: '/register', component: register } ], // 和激活相关的类 linkActiveClass !! //设置 链接激活时使用的 CSS 类名。默认值可以通过路由的构造选项 linkActiveClass 来全局配置 routes: [ linkActiveClass: 'myactive' })
设置路由切换动效
具体使用看下面的完整例子
完整例子
<!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="./lib/vue-2.4.0.js"></script>
<!-- 1. 安装 vue-router 路由模块 -->
<script src="./lib/vue-router-3.0.1.js"></script>
<style>
.router-link-active,
.myactive {
color: red;
font-weight: 800;
font-style: italic;
font-size: 80px;
text-decoration: underline;
background-color: green;
}<span class="token selector">.v-enter, .v-leave-to</span> <span class="token punctuation">{<!-- --></span> <span class="token property">opacity</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">transform</span><span class="token punctuation">:</span> <span class="token function">translateX</span><span class="token punctuation">(</span>140px<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.v-enter-active, .v-leave-active</span> <span class="token punctuation">{<!-- --></span> <span class="token property">transition</span><span class="token punctuation">:</span> all 0.5s ease<span class="token punctuation">;</span> <span class="token punctuation">}</span></style>
</head><body>
<div id="app"><span class="token comment"><!-- <a href="#/login">登录</a> --></span> <span class="token comment"><!-- <a href="#/register">注册</a> --></span> <span class="token comment"><!-- router-link 默认渲染为一个a 标签 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-link</span> <span class="token attr-name">to</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/login<span class="token punctuation">"</span></span> <span class="token attr-name">tag</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>span<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>登录<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-link</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-link</span> <span class="token attr-name">to</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/register<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>注册<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-link</span><span class="token punctuation">></span></span> <span class="token comment"><!-- 这是 vue-router 提供的元素,专门用来 当作占位符的,将来,路由规则,匹配到的组件,就会展示到这个 router-view 中去 --></span> <span class="token comment"><!-- 所以: 我们可以把 router-view 认为是一个占位符 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>transition</span> <span class="token attr-name">mode</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>out-in<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>transition</span><span class="token punctuation">></span></span></div>
<script>
// 组件的模板对象
var login = {
template: '<h1>登录组件</h1>'
}<span class="token keyword">var</span> register <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1>注册组件</h1>'</span> <span class="token punctuation">}</span> <span class="token comment">/* Vue.component('login', { template: '<h1>登录组件</h1>' }) */</span> <span class="token comment">// 2. 创建一个路由对象, 当 导入 vue-router 包之后,在 window 全局对象中,就有了一个 路由的构造函数,叫做 VueRouter</span> <span class="token comment">// 在 new 路由对象的时候,可以为 构造函数,传递一个配置对象</span> <span class="token keyword">var</span> routerObj <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueRouter</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> <span class="token comment">// route // 这个配置对象中的 route 表示 【路由匹配规则】 的意思</span> routes<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token comment">// 路由匹配规则 </span> <span class="token comment">// 每个路由规则,都是一个对象,这个规则对象,身上,有两个必须的属性:</span> <span class="token comment">// 属性1 是 path, 表示监听 哪个路由链接地址;</span> <span class="token comment">// 属性2 是 component, 表示,如果 路由是前面匹配到的 path ,则展示 component 属性对应的那个组件</span> <span class="token comment">// 注意: component 的属性值,必须是一个 组件的模板对象, 不能是 组件的引用名称;</span> <span class="token comment">// { path: '/', component: login },</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/'</span><span class="token punctuation">,</span> redirect<span class="token punctuation">:</span> <span class="token string">'/login'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// 这里的 redirect 和 Node 中的 redirect 完全是两码事</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/login'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> login <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/register'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> register <span class="token punctuation">}</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> linkActiveClass<span class="token punctuation">:</span> <span class="token string">'myactive'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// 创建 Vue 实例,得到 ViewModel</span> <span class="token keyword">var</span> vm <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> el<span class="token punctuation">:</span> <span class="token string">'#app'</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> methods<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> router<span class="token punctuation">:</span> routerObj <span class="token comment">// 将路由规则对象,注册到 vm 实例上,用来监听 URL 地址的变化,然后展示对应的组件</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></script>
</body>
</html>
在路由规则中定义参数
- 在规则中定义参数:
{ path: '/register/:id', component: register }
- 通过
this.$route.params来获取路由中的参数:
var register = Vue.extend({
template: '<h1>注册组件 --- {{this.$route.params.id}}</h1>'
});
方法一
<!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="./lib/vue-2.4.0.js"></script>
<script src="./lib/vue-router-3.0.1.js"></script>
</head><body>
<div id="app"><span class="token comment"><!-- 如果在路由中,使用 查询字符串,给路由传递参数,则 不需要修改 路由规则的 path 属性 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-link</span> <span class="token attr-name">to</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/login?id=10&name=zs<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>登录<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-link</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-link</span> <span class="token attr-name">to</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/register<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>注册<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-link</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span></div>
<script>
<span class="token keyword">var</span> login <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1>登录 --- {<!-- -->{ $route.query.id }} --- {<!-- -->{ $route.query.name }}</h1>'</span><span class="token punctuation">,</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> <span class="token punctuation">{<!-- --></span> msg<span class="token punctuation">:</span> <span class="token string">'123'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">created</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 组件的生命周期钩子函数 $route 表示(当前路由信息对象)</span> <span class="token comment">// console.log(this.$route)</span> <span class="token comment">// console.log(this.$route.query.id)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> register <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1>注册</h1>'</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> router <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueRouter</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> routes<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/login'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> login <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/register'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> register <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// 创建 Vue 实例,得到 ViewModel</span> <span class="token keyword">var</span> vm <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> el<span class="token punctuation">:</span> <span class="token string">'#app'</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> methods<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// router: router</span> router <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></script>
</body>
</html>
方法二
<!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="./lib/vue-2.4.0.js"></script>
<script src="./lib/vue-router-3.0.1.js"></script>
</head><body>
<div id="app"><span class="token comment"><!-- 如果在路由中,使用 查询字符串,给路由传递参数,则 不需要修改 路由规则的 path 属性 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-link</span> <span class="token attr-name">to</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/login/12/ls<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>登录<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-link</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-link</span> <span class="token attr-name">to</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/register<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>注册<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-link</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span></div>
<script>
<span class="token keyword">var</span> login <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1>登录 --- {<!-- -->{ $route.params.id }} --- {<!-- -->{ $route.params.name }}</h1>'</span><span class="token punctuation">,</span> <span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> <span class="token punctuation">{<!-- --></span> msg<span class="token punctuation">:</span> <span class="token string">'123'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">created</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> <span class="token comment">// 组件的生命周期钩子函数</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>$route<span class="token punctuation">.</span>params<span class="token punctuation">.</span>id<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> register <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1>注册</h1>'</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> router <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueRouter</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> routes<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/login/:id/:name'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> login <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/register'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> register <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// 创建 Vue 实例,得到 ViewModel</span> <span class="token keyword">var</span> vm <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> el<span class="token punctuation">:</span> <span class="token string">'#app'</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> methods<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// router: router</span> router <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></script>
</body>
</html>
使用 children 属性实现路由嵌套
<div id="app"> <router-link to="/account">Account</router-link><span class="token operator"><</span>router<span class="token operator">-</span>view<span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>router<span class="token operator">-</span>view<span class="token operator">></span></div>
<script>
// 父路由中的组件
const account = Vue.extend({
template:<div> 这是account组件 <router-link to="/account/login">login</router-link> | <router-link to="/account/register">register</router-link> <router-view></router-view> </div>
});<span class="token comment">// 子路由中的 login 组件</span> <span class="token keyword">const</span> login <span class="token operator">=</span> Vue<span class="token punctuation">.</span><span class="token function">extend</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<div>登录组件</div>'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 子路由中的 register 组件</span> <span class="token keyword">const</span> register <span class="token operator">=</span> Vue<span class="token punctuation">.</span><span class="token function">extend</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<div>注册组件</div>'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 路由实例</span> <span class="token keyword">var</span> router <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueRouter</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> routes<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/'</span><span class="token punctuation">,</span> redirect<span class="token punctuation">:</span> <span class="token string">'/account/login'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// 使用 redirect 实现路由重定向</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/account'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> account<span class="token punctuation">,</span> children<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token comment">// 通过 children 数组属性,来实现路由的嵌套</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'login'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> login <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// 注意,子路由的开头位置,不要加 / 路径符</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'register'</span><span class="token punctuation">,</span> component<span class="token punctuation">:</span> register <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建 Vue 实例,得到 ViewModel</span> <span class="token keyword">var</span> vm <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> el<span class="token punctuation">:</span> <span class="token string">'#app'</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> methods<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> components<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span> account <span class="token punctuation">}</span><span class="token punctuation">,</span> router<span class="token punctuation">:</span> router <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</script>
命名视图实现经典布局
小例子
<!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="./lib/vue-2.4.0.js"></script>
<script src="./lib/vue-router-3.0.1.js"></script>
<style>
html,
body {
margin: 0;
padding: 0;
}<span class="token selector">.header</span> <span class="token punctuation">{<!-- --></span> <span class="token property">background-color</span><span class="token punctuation">:</span> orange<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 80px<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">h1</span> <span class="token punctuation">{<!-- --></span> <span class="token property">margin</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">padding</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">font-size</span><span class="token punctuation">:</span> 16px<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.container</span> <span class="token punctuation">{<!-- --></span> <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 600px<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.left</span> <span class="token punctuation">{<!-- --></span> <span class="token property">background-color</span><span class="token punctuation">:</span> lightgreen<span class="token punctuation">;</span> <span class="token property">flex</span><span class="token punctuation">:</span> 2<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.main</span> <span class="token punctuation">{<!-- --></span> <span class="token property">background-color</span><span class="token punctuation">:</span> lightpink<span class="token punctuation">;</span> <span class="token property">flex</span><span class="token punctuation">:</span> 8<span class="token punctuation">;</span> <span class="token punctuation">}</span></style>
</head><body>
<div id="app"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>left<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>router-view</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>main<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>router-view</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span></div>
<script>
<span class="token keyword">var</span> header <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1 class="header">Header头部区域</h1>'</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> leftBox <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1 class="left">Left侧边栏区域</h1>'</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> mainBox <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<h1 class="main">mainBox主体区域</h1>'</span> <span class="token punctuation">}</span> <span class="token comment">// 创建路由对象</span> <span class="token keyword">var</span> router <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueRouter</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> routes<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token comment">/* { path: '/', component: header }, { path: '/left', component: leftBox }, { path: '/main', component: mainBox } */</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/'</span><span class="token punctuation">,</span> components<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span> <span class="token string">'default'</span><span class="token punctuation">:</span> header<span class="token punctuation">,</span> <span class="token string">'left'</span><span class="token punctuation">:</span> leftBox<span class="token punctuation">,</span> <span class="token string">'main'</span><span class="token punctuation">:</span> mainBox <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// 创建 Vue 实例,得到 ViewModel</span> <span class="token keyword">var</span> vm <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> el<span class="token punctuation">:</span> <span class="token string">'#app'</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> methods<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> router <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></script>
</body>
</html>
- 标签代码结构:
<div id="app">
<router-view></router-view>
<div class="content">
<router-view name="a"></router-view>
<router-view name="b"></router-view>
</div>
</div>
- JS代码:
<script> var header = Vue.component('header', { template: '<div class="header">header</div>' });<span class="token keyword">var</span> sidebar <span class="token operator">=</span> Vue<span class="token punctuation">.</span><span class="token function">component</span><span class="token punctuation">(</span><span class="token string">'sidebar'</span><span class="token punctuation">,</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<div class="sidebar">sidebar</div>'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> mainbox <span class="token operator">=</span> Vue<span class="token punctuation">.</span><span class="token function">component</span><span class="token punctuation">(</span><span class="token string">'mainbox'</span><span class="token punctuation">,</span> <span class="token punctuation">{<!-- --></span> template<span class="token punctuation">:</span> <span class="token string">'<div class="mainbox">mainbox</div>'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建路由对象</span> <span class="token keyword">var</span> router <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueRouter</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> routes<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{<!-- --></span> path<span class="token punctuation">:</span> <span class="token string">'/'</span><span class="token punctuation">,</span> components<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">default</span><span class="token punctuation">:</span> header<span class="token punctuation">,</span> a<span class="token punctuation">:</span> sidebar<span class="token punctuation">,</span> b<span class="token punctuation">:</span> mainbox <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 创建 Vue 实例,得到 ViewModel</span> <span class="token keyword">var</span> vm <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span> el<span class="token punctuation">:</span> <span class="token string">'#app'</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> methods<span class="token punctuation">:</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span><span class="token punctuation">,</span> router <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</script>
- CSS 样式:
<style> .header { border: 1px solid red; }<span class="token selector">.content</span><span class="token punctuation">{<!-- --></span> <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.sidebar</span> <span class="token punctuation">{<!-- --></span> <span class="token property">flex</span><span class="token punctuation">:</span> 2<span class="token punctuation">;</span> <span class="token property">border</span><span class="token punctuation">:</span> 1px solid green<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 500px<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.mainbox</span><span class="token punctuation">{<!-- --></span> <span class="token property">flex</span><span class="token punctuation">:</span> 8<span class="token punctuation">;</span> <span class="token property">border</span><span class="token punctuation">:</span> 1px solid blue<span class="token punctuation">;</span> <span class="token property">height</span><span class="token punctuation">:</span> 500px<span class="token punctuation">;</span> <span class="token punctuation">}</span>
</style>

浙公网安备 33010602011771号