路由(用 Vue.js + Vue Router 创建单页应用)

<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。

url 地址和真实的资源之间的对应关系,就是路由。

路由分为前端路由和后端路由:
1) 后端路由是由服务器端进行实现,并完成资源的分发
2) 前端路由是依靠hash值(锚链接)的变化进行实现 前端路由主要做的事情就是监听事件并分发执行事件处理函数。
核心实现依靠一个事件,即监听hash值变化的事件: window.onhashchange = function(){
//location.hash可以获取到最新的hash值
location.hash
}

基本使用

<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. 定义 (路由) 组件。
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' } // 2. 定义路由(每个路由应该映射一个组件)
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
] // 3. 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
routes
}) 或者:
// 创建路由实例对象
const router = new VueRouter({
// 所有的路由规则
routes: [
{ path: '/', redirect: '/User'},
{ path: '/user', component: User },
{ path: '/register', component: Register }
]
}) // 4. 创建和挂载根实例。
const app = new Vue({
router
}).$mount('#app')

路由嵌套

      const Register = {
template:
`<div>
<h1>Register 组件</h1> <!-- 子路由链接 -->
<router-link to="/register/tab1">tab1</router-link>
<router-link to="/register/tab2">tab2</router-link> <!-- 子路由的占位符 -->
<router-view />
<div>`
} const Tab1 = {
template: '<h3>tab1 子组件</h3>'
} const Tab2 = {
template: '<h3>tab2 子组件</h3>'
} // 创建路由实例对象
const router = new VueRouter({
// 所有的路由规则
routes: [
// children 数组表示子路由规则
{
path: '/register', component: Register,
children: [
{ path: '/register/tab1', component: Tab1 },
{ path: '/register/tab2', component: Tab2 }
]
}
]
})

路由重定向

{path: '/', redirect: '/user'}

动态路由匹配

<router-link to="/user/1">User1</router-link>	// "/1"为参数
<router-link to="/user/2">User2</router-link>
<router-link to="/user/3">User3</router-link> 1.
const User = {
template: '<h1>{{$route.params.id}}</h1>'
} routes: [
{ path: '/user/:id', component: User },
] 2.
const User = {
props: ['id'],
template: '<h1>{{id}}</h1>'
} { path: '/user/:id', component: User, props: true } 3. 此方法无法接收到id值(/user/:id无法接收)
const User = {
props: ['id', 'name', 'age'],
template: '<h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>'
} { path: '/user/:id', component: User, props: { name: 'lisi', age: 20 } } 4.
const User = {
props: ['id', 'name', 'age'],
template: '<h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>'
} {
path: '/user/:id',
component: User,
props: route => ({ name: 'zs', age: 20, id: route.params.id })
}

命名路由

<router-link :to="{ name: 'user', params: {id: 3} }">User</router-link>	//params传递参数

const User = {
props: ['id', 'name', 'age'],
template: '<h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>'
} routes: [
{ path: '/', redirect: '/user' },
{
// 命名路由
name: 'user',
path: '/user/:id',
component: User,
props: route => ({ name: 'zs', age: 20, id: route.params.id })
}
]

编程式导航

声明式导航:通过点击链接实现导航的方式

编程式导航:通过调用JavaScript形式的API实现导航的方式

常用的编程式导航 API 如下:
this.$router.push('hash地址')
this.$router.go(n) 编程式导航 router.push() 方法的参数规则:
// 字符串(路径名称)
router.push('/home')
// 对象
router.push({ path: '/home' })
// 命名的路由(传递参数)
router.push({ name: '/user', params: { userId: 123 }})
// 带查询参数,变成 /register?name=lisi
router.push({ path: '/register', query: { name: 'lisi' }}) const User = {
props: ['id', 'name', 'age'], template:
`<div>
<h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>
<button @click="goRegister">跳转到注册页面</button>
</div>`, methods: {
goRegister() {
this.$router.push('/register')
}
},
} const Register = {
template:
`<div>
<h1>Register 组件</h1>
<button @click="goBack">后退</button>
</div>`, methods: {
goBack() {
this.$router.go(-1)
}
}
}

Vue.js(六)的更多相关文章

  1. vue.js第六课

    class与style绑定 绑定HTML class 对象语法 数组语法 绑定内联样式 对象语法 数组语法 自动添加前缀 1.class与style绑定. 数据绑定一个常见需求就是 操作元素的clas ...

  2. Vue.js 源码分析(二十六) 高级应用 作用域插槽 详解

    普通的插槽里面的数据是在父组件里定义的,而作用域插槽里的数据是在子组件定义的. 有时候作用域插槽很有用,比如使用Element-ui表格自定义模板时就用到了作用域插槽,Element-ui定义了每个单 ...

  3. Vue.js 源码分析(十六) 指令篇 v-on指令详解

    可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码,例如: <!DOCTYPE html> <html lang="en"& ...

  4. 第六篇:vue.js模板语法(,属性,指令,参数)

    Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统. 结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上.( ...

  5. Vue.js双向绑定的实现原理

    Vue.js最核心的功能有两个,一是响应式的数据绑定系统,二是组件系统.本文仅探究几乎所有Vue的开篇介绍都会提到的hello world双向绑定是怎样实现的.先讲涉及的知识点,再参考源码,用尽可能少 ...

  6. vue.js在windows本地下搭建环境和创建项目

    Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.另一方面,Vu ...

  7. vue.js+boostrap最佳实践

    一.为什么要写这篇文章 最近忙里偷闲学了一下vue.js,同时也复习了一下boostrap,发现这两种东西如果同时运用到一起,可以发挥很强大的作用,boostrap优雅的样式和丰富的组件使得页面开发变 ...

  8. vue.js

    一:vue的简单介绍: (1)Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件: (2)Vue.js 自身不是一个全能框架——它只聚焦于视图层.因此它非常容易学习,非 ...

  9. Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)

    Vue.js双向绑定的实现原理 解析 神奇的 Object.defineProperty 这个方法了不起啊..vue.js和avalon.js 都是通过它实现双向绑定的..而且Object.obser ...

随机推荐

  1. 【NLP新闻-2013.06.16】Representative Reviewing

    英语原文地址:http://nlp.hivefire.com/articles/share/40221/ 注:本人翻译NLP新闻只为学习专业英语和扩展视野,如果翻译的不好,请谅解! (实在是读不大懂, ...

  2. SSM项目用ajax来显示数据

    <script type="text/javascript"> //1:页面加载完成后,直接去发送ajax请求,要到分页的数据 $(function(){ $.ajax ...

  3. php trim()函数 语法

    php trim()函数 语法 trim()函数怎么用? php trim()函数用来删除字符串两端的空格或其他预定义字符,语法是trim(string,charlist),返回经过charlist处 ...

  4. Apache搭建http网站服务器入门教程

    Apache搭建http网站服务器入门教程 准备工具 一台带有Linux系统的主机,这里使用CentOS 7.1 64位系统 一个备案过的域名,这里使用www.hellopage.cn 一台可以访问网 ...

  5. [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题

    问题: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregat ...

  6. 【转】 Linux 的目录详解 (Linux基础一)

    前言 转自: http://c.biancheng.net/view/2833.html 进行了一些提炼和修改. 学习 Linux,不仅限于学习各种命令,了解整个 Linux 文件系统的目录结构以及各 ...

  7. python导入自定义模块和包

    参考资料 https://blog.csdn.net/gvfdbdf/article/details/52084144 http://www.runoob.com/python/python-modu ...

  8. python接口自动化测试三十六:数据驱动参数化之paramunittest

    官方文档1.官方文档地址:https://pypi.python.org/pypi/ParamUnittest/2.github源码下载地址:https://github.com/rik0/Param ...

  9. <读书笔记>《Web前端开发最佳实践》

    P77 P89 CSS Reset P94 给CSS样式定义排序    排序工具:CSScomb P97 什么是CSS的权重?权重是指选择符的优先级 P100 工具:Sass Less P101 框架 ...

  10. Java迭代器模式

    迭代器模式是Java和.Net编程环境中非常常用的设计模式.此模式用于以顺序方式访问集合对象的元素,而不需要知道其底层表示. 迭代器模式属于行为模式类别. 实现实例 在这个实例中,将创建一个Itera ...