1.1 定义路由

  1、说明

      1. 路由是单页面应用程序(SPA)的关键,Vue提供过来路由插件,使用这个路由就要安装这个插件

      2. 安装: npm install vue-router

      3. 依赖于vue文件,所有要优先引入vue

      4. 引入路由之后,我们就可以基于组件+路由实现单页面应用程序开发

      5. 路由使用官网:  https://router.vuejs.org/zh-cn/

  2、路由作用

      1.  定义组件分成三步:1 定义组件容器元素, 2 定义组件类, 3 注册组件

      2. 当使用路由的时候,这三步就抽象成一步,我们只需要定义一个组件类参数对象即可

      3. 所以使用路由,让我们定义组件变得简单了,这里的组件对象,只能被路由使用

  3、使用路由分成以下三步

    1. 第一步 定义路由规则

        1. var routes = [{}, {}],每一个参数代表一个路由对象
        2. path定义规则;name定义路由名称;component 表示路由的组件:这里使用组件对象

    2. 第二步 实例化路由对象

        1. 实例化时候,我们要添加路由规则

    3. 第三步 在vue实例化对象中,注册路由

        1. 第一件事 注册路由

        2. 第二件事 定义路由渲染的容器(在模板中) router-view,渲染的时候,router-view会自动删除

注:在访问的url后面加上 #/home、#/detail、#/list 就会显示对应的组件内容

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<div id="app">
<h1>vue实例化对象</h1>
<router-view></router-view> <!--定义渲染容器-->
</div> <script type="text/javascript" src="vue.js"></script>
<script type="text/javascript" src="vue-router.js"></script>
<script>
var Home = {
template:'<h1>home</h1>'
};
var List = {
template:'<h1>list {{msg}}</h1>',
data:function () {
return {
msg: 'hello'
}
}
};
var Detail = {
template:'<h1>detail</h1>',
}; // 第一步:定义路由规则
var routes = [
{
path:'/home',
name:'home',
component:Home
},
{
path:'/list',
name:'list',
component:List
},
{
path:'/detail',
name:'detail',
component:Detail
},
]; // 第二步:实例化路由对象
var router = new VueRouter({
routes:routes
}); // 第三步:在vue实例化对象中注册路由
var app = new Vue({
el:'#app',
router:router
})
</script>
</body>
</html>

路由基本使用

1.2 路由参数

   1、路由参数说明

      1. 一个 ‘’/” 将路由切割成一个一个模块,这些模块默认都是静态路由

      2. 静态路由是不能变的,一个规则对应一个路径

      3. 动态路由:一个规则对应多个路径

      4. 例如 /page/:pageNum

        匹配: /page/10, /page/100, /page/hello

        不匹配: /list/10, /page/10/abc

  2、路由参数使用范围

      1. 动态的路由参数是可以捕获的,并且在任何组件中(vue实例化对象),都可以捕获或

      2. 每一个组件实例化对象,都添加了一个$route的参数, 定义在组件实例化对象的原型上。

      3.  通过params属性,即可获取动态路由参数   $route.params.id    (在控制台可以这样获取:app.$route)

      4. 通过query属性,获取query参数   $route.query.word (在控制台可以这样获取:  app.$route.query)

 注:这种定义放法 在url后面加上 #/detail不会访问组件,只有像这样 #/detail/20?word=hello 才可以访问

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<div id="app">
<h1>vue实例化对象</h1>
<router-view></router-view> <!--定义渲染容器-->
</div> <script type="text/javascript" src="vue.js"></script>
<script type="text/javascript" src="vue-router.js"></script>
<script>
var Detail = {
template:'<h1>detail --- {{$route.params.id}}---{{$route.query.word}}</h1>',
}; // 第一步:定义路由规则
var routes = [
{
// 多个商品对应一个页面
path:'/detail/:id',
name:'detail',
component:Detail
}
]; // 第二步:实例化路由对象
var router = new VueRouter({
routes:routes
}); // 第三步:在vue实例化对象中注册路由
var app = new Vue({
el:'#app',
router:router
})
</script>
</body>
</html>

路由参数

    

1.3 嵌套路由

  1、嵌套路由说明

      1. 路由可以嵌套定义。也就是说路由中可以定义其子路由

      2. 分成两步:

        第一步 在路由的模板中,定义router-view元素,定义渲染的容器

        第二步 在路由对象中添加children属性,属性值是数组,

  2、嵌套路由举例

      1. 如果路径后加上  #/home 仅显示home页面组件

      2. 如果路径加上 #/home/search 会同时显示home组价和子组件 search组件中内容

      3. 由于 page子路由中写的是绝对路径 '/page' 所以访问路径变成 #/page 而不用加上父路径home,显示home组件和page组件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<div id="app">
<h1>vue实例化对象</h1>
<router-view></router-view> <!--定义渲染容器-->
</div> <template id="home">
<div>
<h1>home</h1>
<router-view></router-view> <!--第一步:定义子路由渲染的容器-->
</div>
</template> <script type="text/javascript" src="vue.js"></script>
<script type="text/javascript" src="vue-router.js"></script>
<script>
var Home = {
template:'#home',
// 添加子路由
};
var Page = {
template: '<h2>page</h2>'
}; // 第一步:定义路由规则
var routes = [
{
path:'/home',
name:'home',
component:Home,
children:[
{path:'/page',component:Page}, // 如果子路由的路径是绝对路径,结果就是该绝对路径
{path:'search',component:{template:'<h2>search</h2>'}}, // 如果子路由的路径是相对路径,结果就是父路径+子路径
]
}
]; // 第二步:实例化路由对象
var router = new VueRouter({
routes:routes
}); // 第三步:在vue实例化对象中注册路由
var app = new Vue({
el:'#app',
router:router
})
</script>
</body>
</html>

嵌套路由

    

1.4 路由重定向

  1、说明

      1. 我们可以定义路由对象的path属性是*,此时会匹配所有的路径,

      2. 然后再定义redirect可以将路由重定向到某个路由,实现默认路由的定义

      注意:由于*匹配的广,因此定义在最后面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<div id="app">
<h1>vue实例化对象</h1>
<router-view></router-view> <!--定义渲染容器-->
</div> <script type="text/javascript" src="vue.js"></script>
<script type="text/javascript" src="vue-router.js"></script>
<script>
var Home = {
template:'<h1>home</h1>'
};
var List = {
template:'<h1>list {{msg}}</h1>',
data:function () {
return {
msg: 'hello'
}
}
};
var Detail = {
template:'<h1>detail</h1>',
}; // 第一步:定义路由规则
var routes = [
{
path:'/home',
name:'home',
component:Home
},
{
path:'/list',
name:'list',
component:List
},
{
path:'/detail',
name:'detail',
component:Detail
},
{
path:'*',
redirect:'/home' // 重定向
}
]; // 第二步:实例化路由对象
var router = new VueRouter({
routes:routes
}); // 第三步:在vue实例化对象中注册路由
var app = new Vue({
el:'#app',
router:router
})
</script>
</body>
</html>

路由重定向

1.5 路由导航:router-link

   1、router-link 标签用法

      1. Vue-router提供了router-link标签元素,可以定义标签导航

      2. 本质上我们可以通过a标签的href来实现指向,但是router-link功能更强大

      3. 标签中可以使用下面三个常用属性:

        1)to指向路径,注意:加上:(v-bind:) 可以使用变量

        2)v-text设置内容,还可以将内容直接写在标签内

        3)tag:定义标签的类型

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<div id="app">
<!--<a href="#/list">列表页</a>-->
<!--<a href="#/detail">详情页</a>-->
<router-link :to="'/list'" v-text="'列表页01'" tag="span"></router-link>
<router-link :to="'/detail'" v-text="'详情页01'"></router-link>
<h1>vue实例化对象</h1>
<router-view></router-view> <!--定义渲染容器-->
</div> <script type="text/javascript" src="vue.js"></script>
<script type="text/javascript" src="vue-router.js"></script>
<script>
var Home = {
template:'<h1>home</h1>'
};
var List = {
template:'<h1>list {{msg}}</h1>',
data:function () {
return {
msg: 'hello'
}
}
};
var Detail = {
template:'<h1>detail</h1>',
}; // 第一步:定义路由规则
var routes = [
{
path:'/home',
name:'home',
component:Home
},
{
path:'/list',
name:'list',
component:List
},
{
path:'/detail',
name:'detail',
component:Detail
},
]; // 第二步:实例化路由对象
var router = new VueRouter({
routes:routes
}); // 第三步:在vue实例化对象中注册路由
var app = new Vue({
el:'#app',
router:router
})
</script>
</body>
</html>

路由导航

07:vue定义路由的更多相关文章

  1. vue嵌套路由-query传递参数(三)

    在嵌套路由中我们经常会遇到父路由向子路由里面传递参数,传递参数有两种方法,通过 query 或者 params index.html <div id="app"> &l ...

  2. vue简单路由(二)

    在实际项目中我们会碰到多层嵌套的组件组合而成,但是我们如何实现嵌套路由呢?因此我们需要在 VueRouter 的参数中使用 children 配置,这样就可以很好的实现路由嵌套. index.html ...

  3. vue简单路由(一)

    在项目中,将vue的单页面应用程序改为了多页面应用程序,因此在某些场景下,需要频繁的切换两个页面,因此考虑使用路由,这样会减少服务器请求. 使用vue-cli(vue脚手架)快速搭建一个项目的模板(w ...

  4. Bug记载2之Vue.JS路由定义的位置

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  5. VUE进阶(路由等)

    初级教程:http://www.cnblogs.com/dmcl/p/6137469.html VUE进阶 自定义指令 http://cn.vuejs.org/v2/guide/custom-dire ...

  6. vue(5)—— vue的路由插件—vue-router 常用属性方法

    前端路由 看到这里可能有朋友有疑惑了,前端也有路由吗?这些难道不应该是在后端部分操作的吗?确实是这样,但是现在前后端分离后,加上现在的前端框架的实用性,为的就是均衡前后端的工作量,所以在前端也有了路由 ...

  7. vue嵌套路由--params传递参数

    在嵌套路由中,父路由向子路由传值除了query外,还有params,params传值有两种情况,一种是值在url中显示,另一种是值不显示在url中. 1.显示在url中index.html <d ...

  8. Vue.js路由

    有时候,我们在用vue的时候会有这样的需求,比如一个管理系统,点了左边的菜单栏,右边跳转到一个新的页面中,而且刷新的时候还会停留在原来打开的页面. 又或者,一个页面中几个不同的画面来回点击切换,这两种 ...

  9. vue.js路由vue-router

    学习网址:https://segmentfault.com/blog/vueroad 转载至:https://segmentfault.com/a/1190000009350679#articleHe ...

随机推荐

  1. Elasticsearch集群监控工具bigdesk插件安装

    bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索引数据.搜索情况,http连接数等. 项目git地址: https://g ...

  2. MySQL数据类型--与MySQL零距离接触 3-2 外键约束的要求解析

    列级约束:只针对某一个字段 表级约束:约束针对2个或2个以上的字段 约束类型是按功能来划分. 外键约束:保持数据一致性,完整性.实现数据表的一对一或一对多的关系.这就是把MySQL称为关系型数据库的根 ...

  3. 自定义Http请求头并且获取

    在一些开发需求中.我们需要把一些信息放到Http请求头中.比如我需要把签名信息 signature 放到Http请求头 所以就需要自定义请求头 signature ,用webClient发起请求 我这 ...

  4. 工厂模式&策略模式。

    抽象.封装,具体事情做得越多,越容易犯错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少.好象我们从编程序中也能悟出人生道理.(百度百科) 不断抽象封装 ...

  5. HTML5表单及其验证

    随笔- 15 文章- 1 评论- 115 HTML5表单及其验证   HTML表单一直都是Web的核心技术之一,有了它我们才能在Web上进行各种各样的应用.HTML5 Forms新增了许多新控件及其A ...

  6. keras 上添加 roc auc指标

    https://stackoverflow.com/questions/41032551/how-to-compute-receiving-operating-characteristic-roc-a ...

  7. C# 自定义用户控件

    上篇:控件制作 本例是制作一个简单的自定义控件,然后用一个简单的测试程序,对于初学者来说,本例子比较简单,只能起到抛石引玉的效果.我也是在学习当中,今后会将自己所学的逐步写出来和大家交流共享. 第一步 ...

  8. 【Linux学习七】软件安装

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 一.编译安装1.解压 源码文件是压缩包 要先解压tar -zxvf t ...

  9. 20165215 2017-2018-2 《Java程序设计》第7周学习总结

    20165215 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 chapter11 下载安装MySQL服务器 启动MySQL数据库服务器 在bin子目录中, ...

  10. 项目方说性能达到百万TPS,如何测试它的可信度?

    项目方说性能达到百万TPS,如何测试它的可信度? 应用系统性能提升的关键在于运维端的接入管理模型(AAA,认证 Authentication.授权 Authorization.计费 Accountin ...