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> 
  1. 后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;

  2. 前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;

  3. 在单页面应用程序中,这种通过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">&lt;!-- &lt;a href="#/login"&gt;登录&lt;/a&gt; --&gt;</span>
<span class="token comment">&lt;!-- &lt;a href="#/register"&gt;注册&lt;/a&gt; --&gt;</span>

<span class="token comment">&lt;!-- router-link 默认渲染为一个a 标签 --&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span>登录<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-link</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span>注册<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-link</span><span class="token punctuation">&gt;</span></span>


<span class="token comment">&lt;!-- 这是 vue-router 提供的元素,专门用来 当作占位符的,将来,路由规则,匹配到的组件,就会展示到这个 router-view 中去 --&gt;</span>
<span class="token comment">&lt;!-- 所以: 我们可以把 router-view 认为是一个占位符 --&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>router-view</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-view</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>transition</span><span class="token punctuation">&gt;</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">'&lt;h1&gt;注册组件&lt;/h1&gt;'</span>
<span class="token punctuation">}</span>


<span class="token comment">/*  Vue.component('login', {
   template: '&lt;h1&gt;登录组件&lt;/h1&gt;'
 }) */</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>

在路由规则中定义参数

  1. 在规则中定义参数:
{ path: '/register/:id', component: register }
  1. 通过 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">&lt;!-- 如果在路由中,使用 查询字符串,给路由传递参数,则 不需要修改 路由规则的 path 属性 --&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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&amp;name=zs<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>登录<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-link</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span>注册<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-link</span><span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>router-view</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-view</span><span class="token punctuation">&gt;</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">'&lt;h1&gt;登录 --- {<!-- -->{ $route.query.id }} --- {<!-- -->{ $route.query.name }}&lt;/h1&gt;'</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">'&lt;h1&gt;注册&lt;/h1&gt;'</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">&lt;!-- 如果在路由中,使用 查询字符串,给路由传递参数,则 不需要修改 路由规则的 path 属性 --&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span>登录<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-link</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span>注册<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-link</span><span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>router-view</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-view</span><span class="token punctuation">&gt;</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">'&lt;h1&gt;登录 --- {<!-- -->{ $route.params.id }} --- {<!-- -->{ $route.params.name }}&lt;/h1&gt;'</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">'&lt;h1&gt;注册&lt;/h1&gt;'</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">&lt;</span>router<span class="token operator">-</span>view<span class="token operator">&gt;</span><span class="token operator">&lt;</span><span class="token operator">/</span>router<span class="token operator">-</span>view<span class="token operator">&gt;</span>

</div>

<script>
// 父路由中的组件
const account = Vue.extend({
template: &lt;div&gt; 这是account组件 &lt;router-link to="/account/login"&gt;login&lt;/router-link&gt; | &lt;router-link to="/account/register"&gt;register&lt;/router-link&gt; &lt;router-view&gt;&lt;/router-view&gt; &lt;/div&gt;
});

<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">'&lt;div&gt;登录组件&lt;/div&gt;'</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">'&lt;div&gt;注册组件&lt;/div&gt;'</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">&lt;</span>router-view</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-view</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-view</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</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">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>router-view</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</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">'&lt;h1 class="header"&gt;Header头部区域&lt;/h1&gt;'</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">'&lt;h1 class="left"&gt;Left侧边栏区域&lt;/h1&gt;'</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">'&lt;h1 class="main"&gt;mainBox主体区域&lt;/h1&gt;'</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>

  1. 标签代码结构:
<div id="app">
    <router-view></router-view>
    <div class="content">
      <router-view name="a"></router-view>
      <router-view name="b"></router-view>
    </div>
  </div>
  1. 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">'&lt;div class="sidebar"&gt;sidebar&lt;/div&gt;'</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">'&lt;div class="mainbox"&gt;mainbox&lt;/div&gt;'</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>

  1. 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>

posted @ 2021-01-21 20:30  Muliminty  阅读(38)  评论(0)    收藏  举报