学习vue2教程中的简单路由

这是实例的代码html

做为一个新手,本文谈的是我在学习 vue-2.0-simple-routing-example 的一些理解。操做系统为 win7,如下:vue

环境部分

下载好程序包后,解压到任意的盘,假设 e 盘。而后打开 cmd,跳往项目路径,输入node

cd e:\vue-2.0-simple-routing-example-masterwebpack

回车,再输入git

e:github

回车,这样咱们就到了项目路径。而后输入web

npm install算法

创建项目环境和依赖。完成后输入npm

npm run devjson

运行服务器和项目,成功后在浏览器中打开 localhost:8080,这样咱们就能看到实时的对项目的修改结果了。

项目代码部分

main.js

webpack.config.js 中的 entry 属性告诉咱们项目以 main.js 做为入口。

main.js 首先引入 vue 和 routes,vue 很少说,routes 是路径参数。

import 和 export 困扰了我好久,由于用 script 标签引入 json 对象很方便,但在 node 环境开发中就很麻烦,因此理解它俩花了我不少功夫和时间。

import 用来引入函数、对象或者模块,export 用来输出函数、对象或者模块,它们目前只能在 babel 等转换器中实现,浏览器不支持。

而后建立实例,el 挂载 #app,currentRoute 由 window.location.pathname 获得 '/'。

computed 属性中的 ViewComponent 函数计算当前应该渲染的组件,由 routes[this.currentRoute] 获得组件名称。若是存在该组件,则加载该组件,若是不存在,则加载 404.vue 组件。

目前加载的是 Home.vue 组件。

Home.vue

home.vue 是主页的组件,模板是

<template>
    <main-layout>
        <p>Welcome home</p>
    </main-layout>
</template>

结构与 About.vue 和 404.vue 相似。而后引入 MainLayout,来自 Main.vue 组件。

这里有个 slot 的知识点。

除非子组件模板包含至少一个 <slot> 插口,不然父组件的内容将会被丢弃。当子组件模板只有一个没有属性的 slot 时,父组件整个内容片断将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签自己。

父组件 Home.vue 的<p>Welcome home</p>会插入到 Main.vue 中<slot></slot>所在的位置。

当 Main.vue 做为子组件渲染完毕后,Home.vue 做为对象export给父组件 <div id="app"></div>

Main.vue

main.vue 的做用是页面的布局,模板是

<template>
  <div class="container">
    <ul>
      <li>
        <v-link href="/">Home</v-link>
        <v-link href="/about">About</v-link>
      </li>
    </ul>
    <slot></slot>
  </div>
</template>

v-link,这是这个案例的核心。

而后引入VLink。

当 VLink.vue 做为子组件渲染完毕后,Main.vue 做为对象 export 给父组件Home.vue

Vlink.vue

VLink.vue组件渲染连接,模板是

<template>
  <a
    v-bind:href="href"
    v-bind:class="{ active: isActive }"
    v-on:click="go"
  >
    <slot></slot>
  </a>
</template>

在 js 代码段引入 routes 获得地址参数,v-bind:href="href" 绑定连接地址,第一个 href 须要 props 的声明,不然出现未定义错误,这里还用到了类型检测。

v-bind:href 的值来自 Main.vue 中的 <v-link href="/">Home</v-link>的"/"。

在 Main.vue 中有两个 v-link 组件,渲染第二个 v-link 时,v-bind:href 的值是"/about"。

slot插值的算法参看Home.vue

v-bind:class 绑定类,这影响到连接的样式。

computed 属性计算 isactive 的值,若是和 this.$root.currentRoute 的值相同,class 显示 isactive,不然不显示。

v-on:click绑定鼠标点击事件,点击后运行go函数。

event.preventDefault()防止默认行为,这里是页面跳转。

this.$root.currentRoute = this.href变动组件路径,行为反馈到main.js的ViewComponent (),实例中的 render 从新渲染组件。

window.history.pushState()是浏览器的历史记录API,是HTML5的新API。

history.pushState()

相关文章
相关标签/搜索