Vue组件化与路由

Vue组件化思想

  • 组件 (Component) 是 Vue.js 最强大的功能之一
  • 组件可以扩展 HTML 元素,封装可重用的代码
  • 思想体现:标准,分治,重用,组合

Vue组件化的说明

组件化-就是把页面拆分成多个组件,每个组件依赖的 CSS、JS、模板、图片等资源放在一起开发和维护。 因为组件是资源独立的,所以组件在系统内部可复用,组件和组件之间可以嵌套,如果项目比较复杂,可以极大简化代码量,并且对后期的需求变更和维护也更加友好。

组件化开发

需注意,使用自定义组件之前必须注册。Vue.js 提供了 2 种组件的注册方式,全局注册局部注册

全局注册

全局组件注册后,任何vue实例都可以用

全局注册格式

全局注册的注册格式:

Vue.component(组件名称, {
 data: 组件数据,
 template: 组件模板内容
})

小case:定义一个名为button-counter的新组件,功能是点击按钮,然后显示点击的次数

// 定义一个名为button-counter的新组件
Vue.component('button-counter', {
 data: function() {
  return {
   count: 0
  }
 },
 template: '<button v-on:click="handle">点击了{{count}}次</button>
})

全局组件用法 

全局组件的简单用法:

<body>
		<div id="app">
            //组件挂载,标签名与组件名对应,符合驼峰命名规则
			<count-com></incre-com>
			<count-com></incre-com>
		</div>
        //定义组件的模版html,注意是在app外定义 
		<template id="countTem">
			<div align="center">
				<button @click="handle">点击了{{count}}次</button>
			</div>
		</template>
		<script src="../js/vue.js"></script>
		<script>
            //组件名符合驼峰命名规则
			Vue.component("countCom",{
				data() {
					return{
						count: 0
					}
				},
				template: "#countTem",
				methods:{
					handle(){
						this.count++
					}
				}
			})
            //组件存在于vue中,所以必须创建vue
			const App = new Vue({
				el: "#app",
				data: {
				}
			})
		</script>
	</body>

注意事项

  • 组件参数的data值必须是函数同时这个函数要求返回一个对象
  • 组件模板必须是单个根元素
  • 组件模板的内容可以是模板字符串
  • 组件命名方式(短横线,驼峰)

局部注册

只能在当前注册它的vue实例中使用(父组件)

局部注册格式

局部注册的格式:

var ComponentA = { /*...*/ }
var ComponentB = { /*...*/ }
var ComponentC = { /*...*/ }

new Vue({
 el: '#app',
 components: {
  'component-a': ComponentA,
  'component-b': ComponentB,
  'component-c': ComponentC,
 }
})

局部组件用法 

局部组件的简单用法:

<body>
		<h1>局部组件</h1>
		<div id="app">
            //组件挂载,标签名与组件名对应,符合驼峰命名规则
			<add-com></add-com>
			<sub-com></sub-com>
		</div>
        //定义组件的模版html,注意是在app外定义 
		<template id="addTem">
			<div>
				<h1>{{count}}</h1>
				<button @click="addHandle">自增</button>
			</div>
		</template>
		<template id="subTem">
			<div>
				<h1>{{count}}</h1>
				<button @click="subHandle">自减</button>
			</div>
		</template>
		<script src="../js/vue.js"></script>
		<script>
			// 声明组件
			let addCom = {
				data(){
					return{
						count: 0
					}
				},
				template: "#addTem",
				methods: {
					addHandle(){
						this.count++
					}
				}
			}
			let subCom = {
				data(){
					return{
						count: 0
					}
				},
				template: "#subTem",
				methods: {
					subHandle(){
						this.count--
					}
				}
			}
			const app = new Vue({
				el: "#app",
				data: {
					
				},
				methods: {
					
				},
				// 定义局部组件
				components: {
					//组件key: 组件体,key-value形式
					// addCom: addCom,
					//如果key和value的值一样,则可以简写为key
					addCom,
					//subCom: subCom
					subCom
				}
			})
		</script>
	</body>

注意事项

注意事项与全局组件一样,只不过在定义局部组件时,如果组件名与组件体名称一样,则可以直接简写为key(组件名). 

Vue的路由

Vue路由说明

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转;

下面介绍与路由相关的常用三个单词:

  • route:首先它是个单数,译为路由,即我们可以理解为单个路由或者某一个路由;
  • routes:它是个复数,表示多个的集合才能为复数;即我们可以理解为多个路由的集合,JS中表示多种不同状态的集合的形式只有数组和对象两种,事实上官方定义routes是一个数组;所以我们记住了,routes表示多个数组的集合;
  • router:译为路由器,上面都是路由,这个是路由器,我们可以理解为一个容器包含上述两个,或者说它是一个管理者,负责管理上述两个;比如当用户在页面上点击按钮的时候,这个时候router就会去routes中去查找route,就是说路由器会去路由集合中找对应的路由;

Vue路由的使用

定义链接

<!-- 定义链接
	1.router-link 被编译之后转化为a标签
	2.关键字 to   被编译之后转化为href属性 -->
<router-link to="/user">用户</router-link>
<router-link to="/dog">狗狗</router-link>

<!--  指定路由的填充位置 未来展现组件信息 
	  填充的位置被解析之后 就是一个DIV -->
<router-view></router-view>

定义组件标签体

<template id="userTem">
	<div>
		<h3>用户信息</h3>
	</div>
</template>
<template id="dogTem">
	<div>
		<h3>狗信息</h3>
	</div>
</template>

准备组件

let userCom = {
	template: "#userTem"
}
let dogCom = {
	template: "#dogTem"
}

路由对象的定义

let vueRouter = new VueRouter({
	routes: [
		{path: "/user",component: userCom},
		{path: "/dog",component: dogCom}
	]
})

简单应用

<div id="app">
			<!-- 2.定义链接
					1.router-link 被编译之后转化为a标签
					2.关键字 to    被编译之后转化为href属性 -->
			<router-link to="/user">用户</router-link>
			<router-link to="/dog">狗狗</router-link>
			<!--  3.指定路由的填充位置 未来展现组件信息 
				填充的位置被解析之后 就是一个DIV -->
			<router-view></router-view>
		</div>
		<!-- 定义组件的标签体 -->
		<template id="userTem">
			<div>
				<h3>用户信息</h3>
			</div>
		</template>
		<template id="dogTem">
			<div>
				<h3>狗信息</h3>
			</div>
		</template>
		<!-- 1.导入路由js -->
		<script src="../js/vue.js"></script>
		<script src="../js/vue-router.js"></script>
		<script>
			//4.准备组件
			let userCom = {
				template: "#userTem"
			}
			let dogCom = {
				template: "#dogTem"
			}
			//定义路由对象
			let vueRouter = new VueRouter({
				routes: [
					{path: "/", redirect: "/dog"},//使用了路由的重定向
					{path: "/user",component: userCom},
					{path: "/dog",component: dogCom}
				]
			})
			
			const App = new Vue({
				el: "#app",
				data: {
				},
				//5.实现路由的挂载
				router: vueRouter
			})
		</script>

 

 使用了重定向之后:

 

路由的重定向与转发问题

重定向

重定向的关键字是redirect

说明: 用户访问服务器,但是目标服务器无法处理该请求,目标服务器返回一个能够处理请求的网址.由用户再次发起请求,访问服务器获取数据.

用法:

//定义路由对象
let vueRouter = new VueRouter({
	routes: [
		{path: "/", redirect: "/dog"},//使用了路由的重定向
		{path: "/user",component: userCom},
		{path: "/dog",component: dogCom}
	]
})

 当服务器访问跟目录时,服务器返回能够处理请求的/dog网址,由用户再次发起请求,访问服务器获取数据.

注意:redirect重定向改变了url地址,如果重定向的地址需要接收参数然而没有传参不会改变地址,页面不会报错但是也不会显示内容

转发

说明: 用户访问服务器,但是目标服务器无法处理该请求,由服务器内部将请求交给其他服务器处理. 这个过程称之为转发.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值