一、介绍

1、vue-router安装

官方文档:https://router.vuejs.org/zh/installation.html
下载地址:https://unpkg.com/vue-router@2.0.0/dist/vue-router.js

2、路由介绍

(1). 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源
(2). 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现
(3). 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由)

二、使用 vue-router

1. 导入 vue-router

<script src="vue-router.js"></script>

2. 使用 router-link 组件来导航

<router-link to="/login">登录</router-link>

3. 使用 router-view 组件来显示匹配到的组件

<router-view></router-view>

4. 创建使用Vue.extend创建组件

var aaa = Vue.extend({
template: '<h1>aaa</h1>'
})
#简写
var aaa = {
template: '<h1>aaa</h1>'
}

5. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则

var router = new VueRouter({
routes: [
{ path: '/login', component: login },
{ path: '/register', component: register }
]
});

6. 使用 router 属性来使用路由规则

var vm = new Vue({
el: '#app',
router: router // 使用 router 属性来使用路由规则
});

7、在路由中设置自定义参数

//方式一(在router-link中设置好参数)
<router-link to="/q1?id=10&name=q1">传参方式一</router-link>
# 通过 this.$route.query来获取路由中的参数
var q1 = {
template: '<h1>传参方式一****{{ $route.query.id }}***{{ $route.query.name }}</h1>'
} //方式二(在规则中定义参数)
{ path: '/q2/:id/:name', component: q2 }
#通过this.$route.params来获取路由中的参数
var q2 = {
template: '<h1>传参方式二****{{ $route.params.id }}***{{ $route.params.name }}</h1>'
}

8、1-7的例子

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script src="vue-router.js"></script> </head>
<body>
<div id="app"> <!-- <a href="#/login">登录</a> -->
<!-- <a href="#/register">注册</a> -->
<a href="#/register">注册</a>
<router-link to="/login">登录</router-link>
<router-link to="/aaa">aaa</router-link>
<!-- 路由传参 如果在路由中,使用 查询字符串,给路由传递参数,可以直接写在参数路径后面 --> <router-link to="/q1?id=10&name=q1">传参方式一</router-link> <router-link to="/q2/12/q2">传参方式二</router-link>
<!-- router-link 默认渲染为一个a 标签 -->
<!-- <router-link to="/login" tag="span">登录</router-link> -->
<!-- <router-link to="/register">注册</router-link> --> <!-- 这是 vue-router 提供的元素,专门用来 当作占位符的,将来,路由规则,匹配到的组件,就会展示到这个 router-view 中去 -->
<!-- 所以: 我们可以把 router-view 认为是一个占位符 -->
<transition mode="out-in">
<router-view></router-view>
</transition> </div> <script>
// 组件的模板对象
var login = {
template: '<h1>登录组件Login</h1>'
} var register = {
template: '<h1>注册组件register</h1>'
} var aaa = Vue.extend({
template: '<h1>aaa</h1>'
}) var q1 = {
//通过 this.$route.query来获取路由中的参数
template: '<h1>传参方式一****{{ $route.query.id }}***{{ $route.query.name }}</h1>'
} var q2 = {
//通过 this.$route.params来获取路由中的参数
template: '<h1>传参方式二****{{ $route.params.id }}***{{ $route.params.name }}</h1>'
} /* Vue.component('login', {
template: '<h1>登录组件</h1>'
}) */ // 2. 创建一个路由对象, 当 导入 vue-router 包之后,在 window 全局对象中,就有了一个 路由的构造函数,叫做 VueRouter
// 在 new 路由对象的时候,可以为 构造函数,传递一个配置对象
var routerObj = new VueRouter({
// route // 这个配置对象中的 route 表示 【路由匹配规则】 的意思
routes: [ // 路由匹配规则
// 每个路由规则,都是一个对象,这个规则对象,身上,有两个必须的属性:
// 属性1 是 path, 表示监听 哪个路由链接地址;
// 属性2 是 component, 表示,如果 路由是前面匹配到的 path ,则展示 component 属性对应的那个组件
// 注意: component 的属性值,必须是一个 组件的模板对象, 不能是 组件的引用名称;
// { path: '/', component: login },
{ path: '/', redirect: '/login' }, // 这里的 redirect 和 Node 中的 redirect 完全是两码事
{ path: '/login', component: login },
{ path: '/register', component: register },
{ path: '/aaa', component: aaa },
{ path: '/q1', component: q1 },
{ path: '/q2/:id/:name', component: q2 },
],
linkActiveClass: 'myactive'
}) // 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {},
router: routerObj // 将路由规则对象,注册到 vm 实例上,用来监听 URL 地址的变化,然后展示对应的组件
});
</script> </body>
</html>

vue路由1-7的使用例子

9、使用children属性实现路由嵌套

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
</head>
<body>
<div id="app"> <router-link to="/account">Account</router-link> <router-view></router-view> </div> <template id="tmpl">
<div>
<h1>这是 Account 组件</h1> <router-link to="/account/login">登录</router-link>
<router-link to="/account/register">注册</router-link> <router-view></router-view>
</div>
</template> <script> // 组件的模板对象
var account = {
template: '#tmpl'
} var login = {
template: '<h3>登录</h3>'
} var register = {
template: '<h3>注册</h3>'
} var router = new VueRouter({
routes: [
{
path: '/account',
component: account,
// 使用 children 属性,实现子路由,同时,子路由的 path 前面,不要带 / ,否则永远以根路径开始请求,这样不方便我们用户去理解URL地址
children: [
{ path: 'login', component: login },
{ path: 'register', component: register }
]
}
]
}); var vm = new Vue({
el: '#app',
data: {},
methods: {},
router
});
</script> </body>
</html>

路由嵌套例子

三、Vue中的watch、computed、methods属性介绍

1、watch(实现 `名` 和 `姓` 两个文本框的内容改变,则全名的文本框中的值也跟着改变)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="firstName"> +
<input type="text" v-model="lastName"> =
<span>{{fullName}}</span>
</div> <script>
// 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
firstName: 'jack',
lastName: 'chen',
fullName: 'jack - chen'
},
methods: {},
watch: {
'firstName': function (newVal, oldVal) { // 第一个参数是新数据,第二个参数是旧数据
this.fullName = newVal + ' - ' + this.lastName;
},
'lastName': function (newVal, oldVal) {
this.fullName = this.firstName + ' - ' + newVal;
}
}
});
</script>
</body>
</html>

watch

2、computed`计算属性

(1).默认只有getter的计算属性

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="firstName"> +
<input type="text" v-model="lastName"> =
<span>{{fullName}}</span>
</div> <script>
// 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
firstName: 'jack',
lastName: 'chen'
},
methods: {},
computed: { // 计算属性; 特点:当计算属性中所以来的任何一个 data 属性改变之后,都会重新触发 本计算属性 的重新计算,从而更新 fullName 的值
fullName() {
return this.firstName + ' - ' + this.lastName;
}
}
});
</script>
</body>
</html>

getter属性

(2).定义有getter和setter的计算属性

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="firstName">
<input type="text" v-model="lastName">
<!-- 点击按钮重新为 计算属性 fullName 赋值 -->
<input type="button" value="修改fullName" @click="changeName"> <span>{{fullName}}</span>
</div> <script>
// 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
firstName: 'jack',
lastName: 'chen'
},
methods: {
changeName() {
this.fullName = 'TOM - chen2';
}
},
computed: {
fullName: {
get: function () {
return this.firstName + ' - ' + this.lastName;
},
set: function (newVal) {
var parts = newVal.split(' - ');
this.firstName = parts[0];
this.lastName = parts[1];
}
}
}
});
</script>
</body>
</html>

getter和setter的计算属性

3、methods(我们使用vue写函数的地方)

<script>
var vm = new Vue({
el:'#app',
data:{
msg:'hello vue',
},
methods:{
hello: function(){
alert('hello vue')
}
},
})
</script>

4、watch、computed和methods之间的对比

1. computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用
2. methods方法表示一个具体的操作,主要书写业务逻辑
3. watch一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computed和methods的结合体

四、使用watch监视路由地址的改变

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
</head>
<body>
<div id="app">
<router-link to="/login">登录</router-link>
<router-link to="/register">注册</router-link> <!-- 容器 -->
<router-view></router-view> </div> <script>
// 2. 创建子组件
var login = {
template: '<h3>这是登录子组件</h3>'
} var register = {
template: '<h3>这是注册子组件</h3>'
} // 3. 创建一个路由对象
var router = new VueRouter({
routes: [ // 路由规则数组
{ path: '/', redirect: '/login' },
{ path: '/login', component: login },
{ path: '/register', component: register }
],
linkActiveClass: 'myactive' // 和激活相关的类
}) // 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {},
// router: router
router,
watch: {
// this.$route.path
'$route.path': function (newVal, oldVal) {
if (newVal === '/login') {
alert('欢迎进入登录页面')
} else if (newVal === '/register') {
alert('欢迎进入注册页面')
}
}
}
});
</script>
</body>
</html>

watch监视路由地址的改变

Vue路由(vue-router)的更多相关文章

  1. vue路由请求 router

    创建一个Router.js文件 // 路由请求//声明一个常量设置路菜单// import Vue from "vue/types/index";import Vue from ' ...

  2. 六、vue路由Vue Router

    一.基本概念 route, routes, router 1, route,它是一条路由,由这个英文单词也可以看出来,它是单数, Home按钮  => home内容, 这是一条route,  a ...

  3. vue路由--使用router.push进行路由跳转

    手机赚钱怎么赚,给大家推荐一个手机赚钱APP汇总平台:手指乐(http://www.szhile.com/),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元 route-link是在html中静态定 ...

  4. Vue.js 2.x笔记:路由Vue Router(6)

    1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...

  5. react router @4 和 vue路由 详解(八)vue路由守卫

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 13.vue路由守卫 a.beforeEach 全局守卫 (每个路由调用前都会触发,根据 ...

  6. react router @4 和 vue路由 详解(一)vue路由基础和使用

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...

  7. react router @4 和 vue路由 详解(全)

    react router @4 和 vue路由 本文大纲: 1.vue路由基础和使用 2.react-router @4用法 3.什么是包容性路由?什么是排他性路由? 4.react路由有两个重要的属 ...

  8. 单页vue路由router

    Vue.js + vue-router 可以很简单的实现单页应用. <router-link> 是一个组件,该组件用于设置一个导航链接,切换不同 HTML 内容. to 属性为目标地址, ...

  9. 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 上)

    大家好,今天的内容,我将和大家一起聊聊 Vue 路由相关的知识,如果你以前做过服务端相关的开发,那你一定会对程序的URL结构有所了解,我没记错的话也是路由映射的概念,需要进行配置. 其实前端这些框架的 ...

  10. vue路由登录拦截(vue router登录权限控制)

    实现原理: 哪些路由需要验证需要在路由文件router/index.js中指定: { path: '/', component: Home, name: 'Home', iconCls: 'fa fa ...

随机推荐

  1. dp - 求符合题意的序列的个数

    The sequence of integers a1,a2,…,ak is called a good array if a1=k−1 and a1>0. For example, the s ...

  2. 使用read、readline、readlines和pd.read_csv、pd.read_table、pd.read_fwf、pd.read_excel获取数据

    从文本文件读取数据 法一: 使用read.readline.readlines读取数据 read([size]):从文件读取指定的字节数.如果未给定或为负值,则去取全部.返回数据类型为字符串(将所有行 ...

  3. Qt Installer Framework翻译(5-3)

    推广更新 创建在线安装程序,以便能够向安装产品的用户推广更新. 为了推广更新,需要执行以下步骤: 将待更新内容复制到package文件夹. 在package.xml文件中增加待更新组件的元素的值. 使 ...

  4. PSP第一次总结

    项目计划总结 周活动总结表 姓名:王金萱                                                                                 ...

  5. java面试|精选基础(1)

    以下题目是从面试经历和常考面试题中选出有点儿意思的题目,参考答案如有错误,请联系小编指正,感谢! 1.反射 1.1定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法 ...

  6. tensorboard网络结构

    一.tensorboard网络结构 import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data ...

  7. 机器学习环境配置系列三之Anaconda

    1.下载Anaconda文件 进入anaconda的官网 选择对应的系统 选择希望下载的版本(本人下载的是Anaconda 5.3 For Linux Installer Python 3.7 ver ...

  8. 夜深了 关于 异步Action的定义的截图

  9. 博客与微信小程序的同步

    在此之前,先说说自己最近的打算,才购买了阿里云的服务器,想做一个网站和图床网盘之类的方便自己使用. 考虑到小程序,又打算将自己的博客内容放到小程序中.从零开发实属困难,应该还要一段时间才能完成. 目前 ...

  10. 龙芯 Fedora 28 设置 VNC

    系统为龙芯版Fedora28 (床28) Fedora防火墙默认阻止了VNC所需的端口的访问,导致VNC客户端一直无法连接. 安装VNC Server sudo dnf install tigervn ...