Vue 04 day(路由)

Vue

使用refs获取DOM和组件

//refs获取 Dom节点
<div id="app">
			<h3 ref="myh3">哈哈哈哈啊,今天的天气正好</h3>
			<button type="button" @click="getelement">获取元素</button>
		</div>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			new Vue({
				el: "#app",
			   methods:{
				   getelement:function(){
					   console.log(this.$refs.myh3.innerHTML)
				   }
			   }
			})
		</script>
//获取组件
<div id="app">
			<login ref="mylogin"></login>
			<button type="button" @click="getelement">获取组件</button>
		</div>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			var login={
				template:`<h1>这是组件</h1>`,
				data(){
					return{
						msg:"son msg"
					}
				},
				methods:{
				show(){
					console.log("调用了组件的方法")
				}
				}
			}
			  var app= new Vue({
				el: "#app",
			   methods:{
				   getelement:function(){
					   console.log(this.$refs.mylogin.msg)
					   this.$refs.mylogin.show()
				   }
			   },
			   components:{
				   login
			   }
			})
		</script>

vue-router 路由

什么是路由
mvc框架就是通过URL地址来对应到不同的路由,这就是我们所指的后端路由。
1.后端路由
对于普通的网站,所有的超链接都是URL地址都对应服务器上对应的资源。
2.前端路由
主要通过URL中的hash(#号)来实现不同页面之间的切换,
特点:HTTP请求中不会包含hash相关的内容,所以,单页面程序中的页面跳转主要使用hash实现。
URL的改变不会发送新的请求,他只是在一个页面中跳来跳去,这种通过hash改变 来切换页面的方式,称作前端路由

	<div id="app">
		<!-- 因为是hash路由所以要加# -->
		<a href="#/com1">这是一</a>
		<a href="#/com2">这是2</a>
		<!-- 这是vue-router提供的元素,专门用来 当作占位符的,将来,路由规则匹配到 的组件,就会展示到这个router-view中去-->
		<!-- 所以我们可以把router-view认为是一个占位符 -->
		<router-view ></router-view>
	</div>
	<script src="./js/vue.js"></script>
	<!-- 1.安装vue-router路由模块 -->
	<script src="./js/vue-router.js"></script>
	<script>
		//组件的模板对象
		var com1={
			template:`<div>这是组件一</div>`
		}
		var com2={
			template:`<div>这是组件 二</div>`
		}
		//2.创建一个路由对象,当导入vue-router包之后,在window全局对象中,就有了一个路由的构造函数叫做VueRouter
		//在new路由对象的时候可以为构造函数,传递配置一个对象
		var routerObj= new VueRouter({
			//route //这个配置对象中的route表示【路由匹配规则】的意思
			routes:[//路由匹配规则
			//每个 路由规则都是一个对象,这个规则的对象,身上有两个必须的属性:
			//属性1 是path 表示监听那个路由连接地址
			//属性2 是component 表示,如果卤藕是前面匹配到的path,z则展示component属性对应的那个组件
			//注意:component的属性值,必须是一个组件的模板对象,不能是组件的引用名称
			{path:'/com1',component: com1},
			{path:'/com2',component: com2}
			]
		})
		
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{},
			router: routerObj//将路由规则对象注册到app实例上,用来监听url地址 的 变化,然后展示对应的组件
		})
	</script>

router-link和redirect(重定向)的基本使用

<div id="app">
		<!-- router-link默认渲染为一个a标签 -->
		<router-link to="/com1">这是组件一</router-link>
		<router-link to="/com2">这是组件二</router-link>
		<!-- 这是vue-router提供的元素,专门用来 当作占位符的,将来,路由规则匹配到 的组件,就会展示到这个router-view中去-->
		<!-- 所以我们可以把router-view认为是一个占位符 -->
		<router-view ></router-view>
	</div>
	<script src="./js/vue.js"></script>
	<!-- 1.安装vue-router路由模块 -->
	<script src="./js/vue-router.js"></script>
	<script>
		//组件的模板对象
		var com1={
			template:`<div>这是组件一</div>`
		}
		var com2={
			template:`<div>这是组件 二</div>`
		}
		//2.创建一个路由对象,当导入vue-router包之后,在window全局对象中,就有了一个路由的构造函数叫做VueRouter
		//在new路由对象的时候可以为构造函数,传递配置一个对象
		var routerObj= new VueRouter({
			//route //这个配置对象中的route表示【路由匹配规则】的意思
			routes:[//路由匹配规则
			//每个 路由规则都是一个对象,这个规则的对象,身上有两个必须的属性:
			//属性1 是path 表示监听那个路由连接地址
			//属性2 是component 表示,如果卤藕是前面匹配到的path,z则展示component属性对应的那个组件
			//注意:component的属性值,必须是一个组件的模板对象,不能是组件的引用名称
			{path:'/',redirect: "/com1"},
			{path:'/com1',component: com1},
			{path:'/com2',component: com2}
			]
		})
		
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{},
			router: routerObj//将路由规则对象注册到app实例上,用来监听url地址 的 变化,然后展示对应的组件
		})
	</script>

设置路由链接的样式(linkActiveClass)

<style>
		/* 这是默认的link连接的类名  */
	.router-link-active{
		color: red;
	}
	</style>
</head>
<body>
	<div id="app">
		<!-- router-link默认渲染为一个a标签 -->
		<router-link to="/com1">这是组件一</router-link>
		<router-link to="/com2">这是组件二</router-link>
		<!-- 这是vue-router提供的元素,专门用来 当作占位符的,将来,路由规则匹配到 的组件,就会展示到这个router-view中去-->
		<!-- 所以我们可以把router-view认为是一个占位符 -->
		<router-view ></router-view>
	</div>
	<script src="./js/vue.js"></script>
	<!-- 1.安装vue-router路由模块 -->
	<script src="./js/vue-router.js"></script>
	<script>
		//组件的模板对象
		var com1={
			template:`<div>这是组件一</div>`
		}
		var com2={
			template:`<div>这是组件 二</div>`
		}
		//2.创建一个路由对象,当导入vue-router包之后,在window全局对象中,就有了一个路由的构造函数叫做VueRouter
		//在new路由对象的时候可以为构造函数,传递配置一个对象
		var routerObj= new VueRouter({
			//route //这个配置对象中的route表示【路由匹配规则】的意思
			routes:[//路由匹配规则

			//每个 路由规则都是一个对象,这个规则的对象,身上有两个必须的属性:
			//属性1 是path 表示监听那个路由连接地址
			//属性2 是component 表示,如果卤藕是前面匹配到的path,z则展示component属性对应的那个组件
			//注意:component的属性值,必须是一个组件的模板对象,不能是组件的引用名称
			{path:'/',redirect: "/com1"},
			{path:'/com1',component: com1},
			{path:'/com2',component: com2}
			],
			//这是自己给link式设置类的名字,就可以用这个类名重新写样式
			linkActiveClass:'myclass'
			
		
		})
		
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{},
			router: routerObj//将路由规则对象注册到app实例上,用来监听url地址 的 变化,然后展示对应的组件
		})
	</script>

给路由设置切换动画

<style>
	.v-enter,
	.v-leave-to{
		opacity: 0;
		transform: translateX(140px);
	}
	.v-enter-active,
	.v-leave-active{
		transition: all 0.5s ease;
	}
	</style>


<div id="app">
		
		<router-link to="/com1">这是组件一</router-link>
		<router-link to="/com2">这是组件二</router-link>
		
		<transition name="" mode="out-in">
			<router-view ></router-view>
		</transition>
		
	</div>
	<script src="./js/vue.js"></script>
	<!-- 1.安装vue-router路由模块 -->
	<script src="./js/vue-router.js"></script>
	<script>
		//组件的模板对象
		var com1={
			template:`<div>这是组件一</div>`
		}
		var com2={
			template:`<div>这是组件 二</div>`
		}
		
		var routerObj= new VueRouter({
			//route //这个配置对象中的route表示【路由匹配规则】的意思
			routes:[//路由匹配规则

		
			{path:'/',redirect: "/com1"},
			{path:'/com1',component: com1},
			{path:'/com2',component: com2}
			],
			
			linkActiveClass:'myclass'
			
		
		})
		
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{},
			router: routerObj//将路由规则对象注册到app实例上,用来监听url地址 的 变化,然后展示对应的组件
		})
	</script>

路由传参

在这里插入图片描述

//第一种方法
<div id="app">
		//可以传多个参数
		<router-link to="/com1?id=10&name=ou">这是组件一</router-link>
		<router-link to="/com2">这是组件二</router-link>
		
		<transition name="" mode="out-in">
			<router-view ></router-view>
		</transition>
		
	</div>
	<script src="./js/vue.js"></script>
	<!-- 1.安装vue-router路由模块 -->
	<script src="./js/vue-router.js"></script>
	<script>
		//组件的模板对象
		var com1={
			template:`<div>这是组件一-----{{$route.query.id}}-----{{$route.query.name}}</div>`,
			created() {//这是组件的生命周期函数
		    // console.log(this.$route);
		console.log(this.$route.query.id);
			},
		}
		var com2={
			template:`<div>这是组件 二</div>`
		}
		
		var routerObj= new VueRouter({
			
			routes:[

		
			{path:'/',redirect: "/com1"},
			{path:'/com1',component: com1},
			{path:'/com2',component: com2}
			],
			
			linkActiveClass:'myclass'
			
		
		})
		
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{},
			router: routerObj
		})
//第二种方法
	<div id="app">
		
		<router-link to="/com1/12/ls">这是组件一</router-link>
		<router-link to="/com2">这是组件二</router-link>
		
		<transition name="" mode="out-in">
			<router-view ></router-view>
		</transition>
		
	</div>
	<script src="./js/vue.js"></script>
	<!-- 1.安装vue-router路由模块 -->
	<script src="./js/vue-router.js"></script>
	<script>
		//组件的模板对象
		var com1={
			template:`<div>这是组件一-----{{$route.params.id}}-----{{$route.params.name}}</div>`,
			created() {//这是组件的生命周期函数
		    // console.log(this.$route);
		console.log(this.$route.params.id);
			},
		}
		var com2={
			template:`<div>这是组件 二</div>`
		}
		
		var routerObj= new VueRouter({
			
			routes:[

		
			{path:'/',redirect: "/com1"},
			{path:'/com1/:id/:name',component: com1},
			{path:'/com2',component: com2}
			],
			
			linkActiveClass:'myclass'
			
		
		})
		
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{},
			router: routerObj
		})
	</script>

使用children属性实现组件的嵌套

	<div id="app">
		
		<router-link to="/father">这是父组件的</router-link>
			<router-view ></router-view>
	
		
	</div>
	<template id="tem1">
		<div>
			<h1>这是父组件</h1>
			<router-link to="/father/com1">com1</router-link>
			<router-link to="/father/com2">com2</router-link>
			<router-view ></router-view>
		</div>
	</template>	
	<script src="./js/vue.js"></script>
	<!-- 1.安装vue-router路由模块 -->
	<script src="./js/vue-router.js"></script>
	<script>


		var  father ={
			template:"#tem1"
		}
		//组件的模板对象
		var com1={
			template:`<div>这是组件一</div>`,
		
		}
		var com2={
			template:`<div>这是组件 二</div>`
		}
		
		var routerObj= new VueRouter({
			
			routes:[
			{path:'/father',
			component:father,
			children:[
				{path:'com1',component:com1},
				{path:'com2',component:com2}
			
			]},
			
			
			
			],
		
		})
		
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{},
			router: routerObj
		})
	</script>

命名视图实现经典视图

<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			.header{
				background-color: aqua;
			}
			#big{
				display: flex;	
				height: 400px;
			}
			.left{
				background-color: red;
				flex: 2;
			}
			.main{
				background-color: green;
				flex: 8;
			}
		</style>
	</head>
	<body>
		<div id="app">
		<!-- 因为要传方法,所以要使用事件 绑定v-on -->
		<router-view></router-view>
		<div id="big">
		<router-view name="left"></router-view>
		<router-view name="main"></router-view>
		</div>
		
		
	</div>
	
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	<script src="js/vue-router.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		//定义一个字面量类型 的 组件模板对象
		var header={
			template:`<h1 class="header">这是头部</h1>`
			
		}
		var leftBox={
			template:`<h1 class="left">这是侧边栏</h1>`
		}
		var mainBox={
			template:`<h1 class="main">这是主体区</h1>`
		}
		var routerObj=new VueRouter({
			routes:[{
				path:'/',components:{
					'default':header,
					'left':leftBox,
					'main':mainBox
				}
			}]
		})
		var app=new Vue({
			el:"#app",
			data:{},
			methods:{
			
			},
			router: routerObj
			
		})
	</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值