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

  1. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  2. Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。
  3. url 地址和真实的资源之间的对应关系,就是路由。
  4. 路由分为前端路由和后端路由:
  5. 1) 后端路由是由服务器端进行实现,并完成资源的分发
  6. 2) 前端路由是依靠hash值(锚链接)的变化进行实现
  7. 前端路由主要做的事情就是监听事件并分发执行事件处理函数。
  8. 核心实现依靠一个事件,即监听hash值变化的事件:
  9. window.onhashchange = function(){
  10. //location.hash可以获取到最新的hash值
  11. location.hash
  12. }

基本使用

  1. <div id="app">
  2. <h1>Hello App!</h1>
  3. <p>
  4. <!-- 使用 router-link 组件来导航. -->
  5. <!-- 通过传入 `to` 属性指定链接. -->
  6. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
  7. <router-link to="/foo">Go to Foo</router-link>
  8. <router-link to="/bar">Go to Bar</router-link>
  9. </p>
  10. <!-- 路由出口 -->
  11. <!-- 路由匹配到的组件将渲染在这里 -->
  12. <router-view></router-view>
  13. </div>
  14. // 1. 定义 (路由) 组件。
  15. const Foo = { template: '<div>foo</div>' }
  16. const Bar = { template: '<div>bar</div>' }
  17. // 2. 定义路由(每个路由应该映射一个组件)
  18. const routes = [
  19. { path: '/foo', component: Foo },
  20. { path: '/bar', component: Bar }
  21. ]
  22. // 3. 创建 router 实例,然后传 `routes` 配置
  23. const router = new VueRouter({
  24. routes
  25. })
  26. 或者:
  27. // 创建路由实例对象
  28. const router = new VueRouter({
  29. // 所有的路由规则
  30. routes: [
  31. { path: '/', redirect: '/User'},
  32. { path: '/user', component: User },
  33. { path: '/register', component: Register }
  34. ]
  35. })
  36. // 4. 创建和挂载根实例。
  37. const app = new Vue({
  38. router
  39. }).$mount('#app')

路由嵌套

  1. const Register = {
  2. template:
  3. `<div>
  4. <h1>Register 组件</h1>
  5. <!-- 子路由链接 -->
  6. <router-link to="/register/tab1">tab1</router-link>
  7. <router-link to="/register/tab2">tab2</router-link>
  8. <!-- 子路由的占位符 -->
  9. <router-view />
  10. <div>`
  11. }
  12. const Tab1 = {
  13. template: '<h3>tab1 子组件</h3>'
  14. }
  15. const Tab2 = {
  16. template: '<h3>tab2 子组件</h3>'
  17. }
  18. // 创建路由实例对象
  19. const router = new VueRouter({
  20. // 所有的路由规则
  21. routes: [
  22. // children 数组表示子路由规则
  23. {
  24. path: '/register', component: Register,
  25. children: [
  26. { path: '/register/tab1', component: Tab1 },
  27. { path: '/register/tab2', component: Tab2 }
  28. ]
  29. }
  30. ]
  31. })

路由重定向

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

动态路由匹配

  1. <router-link to="/user/1">User1</router-link> // "/1"为参数
  2. <router-link to="/user/2">User2</router-link>
  3. <router-link to="/user/3">User3</router-link>
  4. 1.
  5. const User = {
  6. template: '<h1>{{$route.params.id}}</h1>'
  7. }
  8. routes: [
  9. { path: '/user/:id', component: User },
  10. ]
  11. 2.
  12. const User = {
  13. props: ['id'],
  14. template: '<h1>{{id}}</h1>'
  15. }
  16. { path: '/user/:id', component: User, props: true }
  17. 3. 此方法无法接收到id值(/user/:id无法接收)
  18. const User = {
  19. props: ['id', 'name', 'age'],
  20. template: '<h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>'
  21. }
  22. { path: '/user/:id', component: User, props: { name: 'lisi', age: 20 } }
  23. 4.
  24. const User = {
  25. props: ['id', 'name', 'age'],
  26. template: '<h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>'
  27. }
  28. {
  29. path: '/user/:id',
  30. component: User,
  31. props: route => ({ name: 'zs', age: 20, id: route.params.id })
  32. }

命名路由

  1. <router-link :to="{ name: 'user', params: {id: 3} }">User</router-link> //params传递参数
  2. const User = {
  3. props: ['id', 'name', 'age'],
  4. template: '<h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>'
  5. }
  6. routes: [
  7. { path: '/', redirect: '/user' },
  8. {
  9. // 命名路由
  10. name: 'user',
  11. path: '/user/:id',
  12. component: User,
  13. props: route => ({ name: 'zs', age: 20, id: route.params.id })
  14. }
  15. ]

编程式导航

  1. 声明式导航:通过点击链接实现导航的方式
  2. 编程式导航:通过调用JavaScript形式的API实现导航的方式
  3. 常用的编程式导航 API 如下:
  4. this.$router.push('hash地址')
  5. this.$router.go(n)
  6. 编程式导航 router.push() 方法的参数规则:
  7. // 字符串(路径名称)
  8. router.push('/home')
  9. // 对象
  10. router.push({ path: '/home' })
  11. // 命名的路由(传递参数)
  12. router.push({ name: '/user', params: { userId: 123 }})
  13. // 带查询参数,变成 /register?name=lisi
  14. router.push({ path: '/register', query: { name: 'lisi' }})
  15. const User = {
  16. props: ['id', 'name', 'age'],
  17. template:
  18. `<div>
  19. <h1>id: {{id}} -- 姓名:{{name}} -- 年龄:{{age}}</h1>
  20. <button @click="goRegister">跳转到注册页面</button>
  21. </div>`,
  22. methods: {
  23. goRegister() {
  24. this.$router.push('/register')
  25. }
  26. },
  27. }
  28. const Register = {
  29. template:
  30. `<div>
  31. <h1>Register 组件</h1>
  32. <button @click="goBack">后退</button>
  33. </div>`,
  34. methods: {
  35. goBack() {
  36. this.$router.go(-1)
  37. }
  38. }
  39. }

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. hdu 1695: GCD 【莫比乌斯反演】

    题目链接 这题求[1,n],[1,m]gcd为k的对数.而且没有顺序. 设F(n)为公约数为n的组数个数 f(n)为最大公约数为n的组数个数 然后在纸上手动验一下F(n)和f(n)的关系,直接套公式就 ...

  2. Vue学习笔记-作用域插槽

    有时候我们希望子组件的内容由父组件决定如何展示,这个时候子组件的数据父组件并不能访问到,而作用域插槽的关键之处就在于,父组件能接收来自子组件的slot传递过来的参数. <div id=" ...

  3. Java反射学习-4 - 反射调用方法

    反射调用方法: package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Method ...

  4. 4412 Linux定时器

    一.Linux定时器基础知识 1.1 定时器的使用范围 延后执行某个操作,定时查询某个状态:前提是对时间要求不高的地方 1.2 内核时间概念 Hz:(系统时钟通过CONFIG_HZ来设置,范围是100 ...

  5. 08-图7 公路村村通(30 分)Prim

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...

  6. 「长乐集训 2017 Day8」修路 (斯坦纳树)

    题目描述 村子间的小路年久失修,为了保障村子之间的往来,AAA君决定带领大家修路. 村子可以看做是一个边带权的无向图GGG, GGG 由 nnn 个点与 mmm 条边组成,图中的点从 1∼n1 \si ...

  7. LR之分析

    1.Errors(错误统计) 每秒错误数:数值越小越好,通过这个图可以知道,当负载增加的时候,定位何时系统在负载下开始不稳定甚至出错. 2.Transaction(事务) average transa ...

  8. Win7、Win10、Linux局域网文件共享

    目录 1.WIN7系统局域网文件共享 2.WIN10系统局域网文件共享 3.Linux 局域网文件共享 WIN7系统局域网文件共享 步骤一: 打开网络和共享中心----更改高级共享设置 步骤二: 选择 ...

  9. Jmeter处理https请求

    首先来看一下HTTPS和HTTP的区别主要如下: 1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用. 2.http是超文本传输协议,信息是明文传输,https则是具有安全性的s ...

  10. Windows 08 R2_组策略

    目录 目录 组策略 组策略对象GPO 实验一组策略的计算机配置 实验二组策略的用户配置 实验三首选设置 实验四组策略更改计算机桌面 常用的组策略管理模块策略 限制用户运行指定的Windows程序 隐藏 ...