vue router Day 3

  • 路由强制跳转    {path:'/',redirect:'/login'}      这样,可实现在url输入根路径,自动跳转到/login,然后显示login组件。相比于 {path:'/',component:login}实现根路径显示login组件,逻辑更好。想想看,用户在/,即可看到登陆组件,点击登陆超链接,url变为/login,还是照常显示登陆组件。用户会不会怀疑两个登陆组件是否是同一个组件,功能是否相同呢?
  • 点击<a>或者<router-link>后,会自动给他们加一个class属性,值为router-link-active。这样,通过给改类设置css,即可轻易实现  点击 登陆/注册, 字体大小粗细颜色等变化,以提醒用户所在逻辑层  等功能  。而且,这个class属性的默认值router-link-active,可以在路由构造函数里配置,如下。这样可以实现点击显示其他已创建的样式。
    const router = new VueRouter({
    				routes: [
    					{
    						path: "/account",
    						component: account,
    						children: [
    							{ },
    							{},
    						], 
    					},
    				],
                    linkActiveClass:'myLink'
    			});

  •   查询字符串(URL参数) 路由传参,储存在路由实例的query属性中。

        用法: 将“?”放在URL的末尾,然后再加上“参数=值”,想加上多个参数的话,使用“&”。以            这个形式,可以将想要发送给服务器的数据添加到URL中。不需要修改path匹配规则。                  可以 用于电商广告,如统计流量从哪里来。


  • 使用params方式传递路由参数

<router-link to="/user/4429">登陆</router-link>

{path:'/user/:id',component:Liu}
//匹配到user后,自动将user后的字符串,作为id属性的值,
//存入路由实例的params中。中国$route.params.id直接可访问到


  • 命名视图
<!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.0" />
		<title>Document</title>
		<script src="https://unpkg.com/vue/dist/vue.js"></script>
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
		<style>
			.head {
				width: 100%;
				height: 20%;
				background-color: green;
			}
			.left {
				width: 30%;
				height: 90px;
				background: yellow;
			}
		</style>
	</head>
	<body>
		<div id="app" style="height: 2000px; width: 100%">
			<router-view></router-view>
			<div style="display: flex">
				<router-view name="left"></router-view>  //指定组件名称在此处显示
				<router-view name="main"></router-view>
			</div>
		</div>
		<script>
			//创建组件
			var header = {
				template: "<h1 class='head'>头部区域</h1>",
			};
			var leftBox = {
				template: "<h1 class='left'>侧边栏区域</h1>",
			};
			var mainBox = {
				template: "<h1 calss='main'>主题区域</h1>",
			};
			const router = new VueRouter({
				//这里构造函数里传递的是一个{}包含的对象,对象里面自然就包含很多可以配置的属性
				routes: [
					{
						path: "/",
						components: {
							//这里component用模板对象来配置。
							default: header, //组件名:组件
							left: leftBox,
							main: mainBox,
						},
					},
				],
			});

			new Vue({
				el: "#app",
				router,
			});
		</script>
	</body>
</html>

  • 山地人第四节,编程式导航。目前感觉没啥用。不过让我对模板对象的理解加深了。
const Home = {
	//有个疑问,模板对象为什么可以设置方法?  //em。。。当然可以,数据和行为组成对象。template就是数据。
	methods: {
		// // 在浏览器记录中前进一步,等同于 history.forward()
		// router.go(1)

		// // 后退一步记录,等同于 history.back()
		// router.go(-1)

		// // 前进 3 步记录
		// router.go(3)

		// // 如果 history 记录不够用,那就默默地失败呗
		// router.go(-100)
		// router.go(100)

		//就到这里吧,感觉有点偏,下一节。
		goToShopcart() {
			this.$router.push("shopcart"); //
		},
		goToSetting() {
			this.$router.push({
				path: "setting/888",
			});
		},
	},
	template: `<div>
                 <h1>Home</h1>
                 <button @click="goToShopcart">
                    购物车
                </button>
                 <button @click="goToSetting">
                    设置页
                </button>
            </div>`,
};

  


  • 命名路由(山地人Lesson05)

        没啥好讲的,很好懂,在李子献的视频里也已经用过了。直接上官方文档

注意到,js里的对象非常灵活,多多体会吧。给to属性传递一个对象,该对象包含一个name属性,name属性若与route对象里的name属性匹配,两者绑定。其中,params属性里包含的对象,可以给path传参。


  • 命名视图,重定向  已经在up主李子献的视频里了解并做了笔记。这部分的文档就先跳过吧。
  • 别名。

        

        注意最后一句话,相当于 函数 变成了 多对一的映射,即,多个不同的path,对应了某个(些)相同的组件。应该会很有用。



创建组件的方式

  • 先介绍两种大同小异的方法
<!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.0" />
		<title>Document</title>
		<script src="https://unpkg.com/vue/dist/vue.js"></script>
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
	</head>
	<body>
		<div id="app">
			<!-- 如果要使用组件,直接把组件的名称,以html的形式,引入到页面中,如下 -->
			<my-com1></my-com1>
			<!-- 取消驼峰,加入'-' ,若名称是小写,则不用变动。-->
		</div>
	</body>
</html>
//1.1使用Vue.extend来创建全局的vue组件
			var com1 = Vue.extend({
				//参数是一个配置对象
				template: "<h3>这是使用vue.extend创建的组件</h3>", //通过template属性,指定了组件要展示的html结构
			});

			//1.2使用vue.component('组件的名称',创建出来的组件模板对象)
			Vue.component("myCom1", com1); //将组件模板对象,注册为一个真正的具有名称的组件,使得将来在页面中,可以引用这个组件

			// //1.3将上面两步合并简写。
			// Vue.component(
			// 	"myCom1",
			// 	Vue.extend({
			// 		template: "<h3>这是使用vue.extend创建的组件</h3>",
			// 	})
			// );



			//2  将1.3进一步简化。
			Vue.component(myCom2, {
				template: "<h3>这是使用vue.componnet创建的组件</h3>",
			});
			//不论用那种房市场创建的组件,组件的template属性指向的模板内容,必须有且只能有位移的一个根元素。如<h1></h1> <p1></p1> 就是错误的,应该用一个div作为根元素包含起来

			var vm = new Vue({
				el: "#app",
			});

上述两种方法,在创建模板时 ,html结构都被引用在了“ ”引号内,没有编辑器的提示。在创建比较大的组件时,很不方便且容易出错。可以参考下面这种方法

<!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.0" />
		<title>Document</title>
		<script src="https://unpkg.com/vue/dist/vue.js"></script>
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
	</head>
	<body>
		<div id="app">
			<mycom3></mycom3>
		</div>
		<!-- 在被vue控制的#app外面,使用template元素,定义组件的html模板结构 -->
		<template id="tmp1">
			<div>
				<h1>
					这是通过template元素,在外部定义的组件结构,这个方式,有代码的只能提示和高亮
				</h1>
				<h2>好用!!</h2>
			</div>
		</template>
		<script>
			Vue.component("mycom3", {
				//第一个参数是组件名称,打引号
				template: "#tmp1",
			});
			var vm = new Vue({
				el: "#app",
			});
		</script>
	</body>
</html>

上面的几种方法,定义出来的都是全局组件。在不同的vue model中都能使用(前提是vue已经注册)

下面给出私有组件的定义方法。

<!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.0" />
		<title>Document</title>
		<script src="https://unpkg.com/vue/dist/vue.js"></script>
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
	</head>
	<body>
		<div id="app1">
			<login></login>
		</div>
        <div id="app2">
            <!-- 这里,就用不了名为login的组件了 -->
        </div>

		<script>
			var vm1 = new Vue({
				el: "#app1",
				components: {
					login: {
						//组件名称
						template: "<h1>私有的组件</h1>",  //同上面的方法,也可以在外部用template标签定义模板并指定id,然后在这里通过id引用。
					},
				},
			});
		</script>
	</body>
</html>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值