记录21.07.24 —— Vue的组件与路由
VUE组件
作用:复用性
创建组件的三种方式

第一种:使用extends搭配component方法

第二种:直接使用component方法

只有用vue声明且命名的才称之为创建组件
注意:template中只能有一个根元素
第三种:将模板字符串,定义到template标签中:

也可以定义在vm中,即私有的,component记得加s

创建私有组件

组件的data与methods


组件的data返回对象


在components里面定义:

在上方定义:

一个按钮控制三个
组件的切换
两个组件利用v-if与v-else


不简写:
效果


点击登录显“登录组件”,点击注册显示“注册组件”
v-else=flag相当于v-if=!flag
多组件利用comment标签的is属性


切换的动画效果

组件之间传值
父组件向子组件传值


运行结果

把props注释掉后,点击按钮显示未定义

子组件向父组件传值


详细打印查看步骤


refs的使用

使用 this.$refs 来获取元素和组件也是一个好的简单的方法
VUE路由
路由入门
引入路由的步骤
①引入路由文件

②创建VueRouter对象,构造方法的参数为一个配置对象

③定义组件

④在页面中使用router-view标签来显示组件,该标签就是个占位符

⑤挂载

详细代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>vue-router入门</title>
		<script src="../js/vue-2.4.0.js"></script>
		<!-- 1.  引入路由文件 -->
		<script src="../js/vue-router-3.0.1.js"></script>
	</head>
	<body>
		<div id="app">
			<!--<a href="#/login">登录</a>
			<a href="#/register">注册</a>-->
			<!--6. router-link 会被解析为a标签-->
			<router-link to="/login" tag="span">登录</router-link>
			<router-link to="/register">注册</router-link>
			<!--5.  在页面中使用 router-view 标签来显示组件, 该标签就是一个占位符,为路由访问的组件站位-->
			<router-view></router-view>
		</div>
		<script type="text/javascript">
			//4. 定义组件。注意:在路由匹配规则中使用的是组件模板的名字,而不是组件名称
			let login = {
				template: "<h1>登录组件</h1>"
			}
			let register = {
				template: "<h1>注册组件</h1>"
			}
			//2.  创建VueRouter对象,构造方法的参数为一个配置对象
			let router = new VueRouter({
				//定义路由的匹配规则
				routes: [
					{path:"/login",component: login},
					{path:"/register",component: register}
				]
			});
			let vm = new Vue({
				el: "#app",
				data: {
					msg: "hello vue hello vue"
				},
				//3. 挂载router
				router
			});
		</script>
	</body>
</html>
路由高亮
点击之后跳转到新的路由,被点击的有显眼的效果
在上一个路由入门的代码中的<head>中加入样式代码

在路由的匹配规则中加入如下代码

效果


路由动画
在路由高亮基础上加入切换样式

路由提交参数
query提交参数
例子:www.baidu.com?id=1&name=tom

效果



param提交参数
例子:www.baidu.com/101/201

效果


编程式路由
利用路由实现页面的前进后退,并把参数提交到路由中
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>编程式路由</title>
		<script src="../js/vue-2.4.0.js"></script>
		<!-- 1.  引入路由文件 -->
		<script src="../js/vue-router-3.0.1.js"></script>
		<style type="text/css">
			.myclass {
				font-size: 24px;
				color: blue;
				background: pink;
			}
			.v-enter,
			.v-leave-to {
				opacity: 0;
				transform: translateX(200px);
			}
			.v-enter-active,
			.v-leave-active {
				transition: all 0.8s ease;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<button @click="toBack">后退</button>
			<span @click="gologin">登录</span>
			<span @click="goregister">注册</span>
			<button @click="toForward">前进</button>
			<button @click="toGo">go</button>
			<transition mode="out-in">
				<router-view></router-view>
			</transition>
		</div>
		<script type="text/javascript">
			let login = {
				template: "<h1>登录组件{{$route.params.userId}}</h1>"
			}
			let register = {
				template: "<h1>注册组件~~~{{$route.query.plan}}</h1>"
			}
			let router = new VueRouter({
				//定义路由的匹配规则
				routes: [{
						path: "/",
						redirect: '/login'
					},
					{
						path: "/login",
						component: login,
						name: 'aa'
					},
					{
						path: "/register",
						component: register
					}
				],
				linkActiveClass: 'myclass'
			});
			let vm = new Vue({
				el: "#app",
				data: {
					msg: "hello vue hello vue"
				},
				methods: {
					gologin() {
						//编程实现路由跳转
						//this.$router.push('/login');
						//router.push({ path: '/login' });
						router.push({
							name: 'aa',
							params: {
								userId: '123'
							}
						})
					},
					goregister() {
						//this.$router.push('/register');
						router.push({
							path: '/register',
							query: {
								plan: 'private'
							}
						})
					},
					toBack() {
						router.back();
					},
					toForward() {
						router.forward();
					},
					toGo() {
						router.go(-2);
					}
				},
				//3. 挂载router
				router
			});
		</script>
	</body>
</html>
效果
默认登录页面

点击注册之后

再点击登录

点击后退按钮,回到注册页面,路由也跳回

点击前进,回到登录页面

导航守卫
在页面中加入路由的判断,例如

在此界面中,未登录状态下点击news与music会自动跳到login
代码如下
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>导航守卫</title>
		<script src="../js/vue-2.4.0.js"></script>
		<script src="../js/vue-router-3.0.1.js"></script>
	</head>
	<body>
		<div id="app">
			<p>
				<router-link to="/home">home</router-link>
				<router-link to="/news">news</router-link>
				<router-link to="/music">music</router-link>
				<router-link to="/login">login</router-link>
			</p>
			<router-view></router-view>
		</div>
		<script type="text/javascript">
			let home = {
				template: "<h1>Home</h1>"
			}
			let news = {
				template: "<h1>News</h1>"
			}
			let music = {
				template: "<h1>Music</h1>"
			}
			let login = {
				template: "<h1>Login</h1>"
			}
			let router = new VueRouter({
				routes: [{
						path: "/",
						redirect: "/home"
					},
					{
						path: "/home",
						component: home
					},
					{
						path: "/news",
						component: news
					},
					{
						path: "/music",
						component: music
					},
					{
						path: "/login",
						component: login
					},
				]
			})
			let vm = new Vue({
				el: "#app",
				router
			});
			router.beforeEach((to, from, next) => {
				//需要被拦截的路径集合
				let list = ["/news", "/music"];
				let isLogin = false; //模拟登录状态
				if (list.indexOf(to.path) >= 0) {
					if (!isLogin) {
						router.push("/login");
						location.reload(); //必须要调用,否则页面不会跳转
					}
				}
				if (to.path === "/login") {
					if (isLogin) {
						router.push("/home");
						location.reload(); //必须要调用,否则页面不会跳转
					}
				}
				next(); //必须调用
			})
		</script>
	</body>
</html>
												
											记录21.07.24 —— Vue的组件与路由的更多相关文章
- 记录21.07.26 —— Vue/cil
		
VUE搭载脚手架 搭载环境 下载node node.js下载地址 控制台输入 npm install -g @vue/cil 查看版本 创建vue项目 创建完后会显示启动服务的指令 这个指令可以在pa ...
 - 记录21.07.23 —— Vue.js基础(二)
		
Vue基础(二) 过滤器 过滤器作用 全局过滤器 输出结果 私有过滤器 输出结果 把其中一个做点修改 错误信息 自定义指令 全局自定义指令 私有自定义指令 钩子函数 注意:fond-weight是粗细 ...
 - 记录21.07.22 —— Vue.js基础(一)
		
VUE基础 语雀课件地址 Vue.js框架 Vue中文文档 Vue.js 创建vue项目 ①在一个空项目中引入vue的js文件 <script src="https://cdn.jsd ...
 - vue(组件、路由)懒加载
		
const Login = resolve => require(['@/components/Login'], resolve) //就不用import了 Vue.use(Router) le ...
 - 记录21.07.21 —— ES6基础
		
学习目录 课件地址: ES6核心技术课件 1.let关键字 1.1 let与var的区别 ①let不能重复定义 ②块作用域的区别 ③变量声明之前let不能使用,var可以 ④ 课件代码 <htm ...
 - 记录21.07.20 —— js语言回顾
		
js语言回顾 1.语法 a并没有声明,也可以输出,不会报错. 添加一条语句 则需要声明,称之为严谨语法 2.数组 2.1数组遍历三种方法 for-in与for-of forEach forEach调用 ...
 - Vue的组件和路由
		
组件 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能. 组件的 ...
 - Vue框架(三)——Vue项目搭建和项目目录介绍、组件、路由
		
Vue项目环境搭建 1) 安装node,在官网下载好,然后在本地安装 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 2) 换源安装cnpm >: npm ins ...
 - vue.js 组件之间传递数据
		
前言 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据也成了组件的重要知识点之一. 组件 组件与组件之间,还存在着不同的关 ...
 
随机推荐
- 解决SpringMVC重复提交的问题
			
方法一:通过重定向采取请求转发的方式完成表单内容的添加会造成内容的重复插入.当向Servlet发送一条增加记录的请求后,servlet首先向数据库增加一条记录,然后又从数据库中查询出所有数据,接着转发 ...
 - linux文件系统和日志分析
			
一.Linux文件系统 1.inode与block 1.概述: (1)文件数据包括元信息与实际信息 (2)文件存储在硬盘上,硬盘最小存储单位是"扇区",每个扇区存储512字节 (3 ...
 - Vue(12)组件的组织结构和组件注册
			
组件的组织 通常一个应用会以一棵嵌套的组件树的形式来组织: 例如,你可能会有页头.侧边栏.内容区等组件,每个组件又包含了其它的像导航链接.博文之类的组件. 为了能在模板中使用,这些组件必须先注册以便 ...
 - LevelDB学习笔记 (1):初识LevelDB
			
LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...
 - .net core 常用rsa 加签类
			
using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Math ...
 - 精尽Spring Boot源码分析 - 日志系统
			
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
 - 编译aarch64 Linux内核并基于qemu运行
			
核心流程 首先,本文主要讲述如何编译Linux内核并在qemu虚拟机上运行.这里针对的架构是aarch64. 本文的实验平台是Ubuntu 16.04. 为了达成目标,我们需要有qemu.buildr ...
 - Centos7中安装elasticsearch
			
第一步:必须要有jre支持 elasticsearch是用Java实现的,跑elasticsearch必须要有jre支持,所以必须先安装jre 第二步:下载elasticsearch 进入官方下载 h ...
 - rename 批量修改文件名
			
1.rename的用法 rename与mv的区别就是mv只能对单个文件重命名,而rename可以批量修改文件名 linux中的rename有两种版本,一种是C语言版的,一种是Perl版的.早期的Lin ...
 - spring boot框架相关知识
			
1.spring:一个轻量级的控制反转和面向切面的容器,专业的开发Web项目的开源框架. spring mvc:是基于spring的mvc框架,属于一个企业WEB开发的MVC框架,涵盖面包括前端 ...