MVVM框架
		M:model层  数据层  做数据的增删改查
		V:view视图层  类似于html的模板
		VM:viewmodel映射层 model层与view层之间的一个映射层(嫁接的桥梁)
	特点
		数据的驱动视图
		再也不会去操作DOM来改变view层的变化(因为操作DOM元素是非常耗费性能的)
	如何使用
		 var vm = new Vue({
        //挂载点  vue作用的范围只会在id为app的这个元素内部
        el:"#app",//document.querySelector()
        //定义当前组件所需要的一些状态    定义当前vue所需要的一些属性
        data:{
            message:"1824"
        }
    })
		在Vue中我们可以直接访问data中的属性
	指令
		v-text:值可以写任意的js表达式
			简写{{}}
			{{}}在页面第一次加载的时候会显示{{}}
		v-html:解析html  相当于innerHTML
		v-show:显示隐藏 (非权限)
			底层是操控元素的display属性
				主要用于:
					选项卡
					组件切换
					动画
		v-if:显示隐藏 (涉及到权限)
			底层是操控元素的创建和销毁
				主要用于:
					后台管理系统
					用户会员级别
					登录与非登录
		v-for:数组的遍历
		v-on:进行事件的绑定(:冒号后面是事件的名称,值为事件的函数)
			格式:v-on:事件名称=事件函数(),简写@事件名称
				once:只绑定一次
				stop:阻止事件冒泡
				prevent:阻止浏览器的默认事件
			vue中所有的事件都需要放在methods中
		v-bind:绑定属性  ,简写(:属性)
			  语法 v-bind:属性 = 值
				v-once:只绑定一次,数据的渲染只渲染一次
				v-pre:不解析vue的数据
				v-cloak:解决{{}}的问题
		v-model:可以用来实现双数据的绑定
			只给表单进行使用
				作用:如果表单上面家了v-model,那么data 中与表单绑定的那个属性就会随着表单的改变而改变
			是根据表单的value值来改变data中属性的值
		自定义指令
			全局创建
				vue.directive()
					参数一:指令的名称
					参数二:指令实现的函数
						参数一:指令作用的元素DOM元素
						参数二:指令的信息对象
							value:表达式的结果
							rawName:指令的全程
							modifiers:修饰符
			局部创建
				directives()
	computed
		是一个计算属性,用来监听属性的变化
		computed:里面的方法调用的时候是不需要加(),另外里面的方法必须要有一个返回值
		computed:里面的方法不是通过事件来触发的,而是当属性(必须是data中的属性)发生了改变的时候那么当前函数就会被触发
		特点:当属性如果没有发生改变的时候。当前方法的值会从缓存中读取
	watch
		用来监听每一个属性的变化
		watch这个对象里面都是函数,函数的名称是data中属性名称,watch中的函数是不需要调用的
		当属性发生改变,就会触发watch中的函数,每一个函数都会接收到两个值,一个是新值另外一个值是旧值
		我们可以在watch中进行新旧值的判断来减少虚拟DOM的渲染
		只要当前是属性发生改变就会触发它所对应的的函数
		如果我们需要对对象进行监听的时候需要将属性设置为key值,val值为一个对象,对象中有两个参数是必填的,一个是handler函数,一个是deep为true,这样才能实现深度监听
	computed与watch的区别
		computed在调用时不需要加(),watch是不需要调用的
		computed如果属性没有发生改变的时候,会从缓存中读取值。watch当属性改变的时候会接收到两个值,一个是新值,一个是旧值
		computed里面的函数必须要有一个return的结果
		watch如果需要监听对象的情况下,必须设置深度监听
		命名:computed里面函数的名称可以随意命名,watch命名必须与data中的属性名保持一致
	生命周期
		一个组件的创建到销毁的过程
			创建
				创建前 beforeCreate
					对数据进行初始化
					我们可以创建一个loading
				创建后 created
					可以访问到VM中所有的属性和方法
					将data和mathods的所有属性和方法挂载到vm的实例对象上
					会将data身上所有的属性和方法添加一个gettet/setter方法,在当前生命周期函中进行前后端数据的交互(响应式原理),如果数据没有提前在data中进行绑定,那么属性身上就不会有getter/setter方法,因此数据也不会动态的改变
			挂载
				挂载前 beforMount
					数据和模板还没有进行结合,可以对数据做最后的修改
					在当前生命周期函数中访问不到真实的DOM结构
				挂载后 mounted
					数据和模板已经进行结合
					可以通过 this.$refs访问到真实的DOM结构
			更新  多次执行的生命周期函数
				更新前beforUpdate
					可以访问到真实的DOM结构
					可以对数据进行最后的修改
					当前生命周期函数中的数据和模板还没有更新完毕
				更新后 updated
					数据更新后最新的DOM结构
					在当前生命周期函数中需要特别注意。因为当前函数是一个频繁触发的函数,因此如果在当前生命周期函数中做一些事件绑定或者实例化的时候需要做一个提前的判断
			销毁
				销毁前 beforeDestroy
					我们还可以继续访问到真实的DOM结构以及data中的数据
					一般我们会在这个生命周期函数中做一些事件的解绑/移除的操作
				销毁后 destroyed
					将DOM与数据之间的关联进行断开
					在当前生命周期函数中使访问不到真实的DOM结构
	vm实例身上的方法
		$mount()手动设置挂载点 eg:vm.$mount("#app")
		$destroy();销毁
		$foreceUpdate 强制更新(强制调用了render方法)
		$on()事件绑定
		$emit()事件触发
		$off()事件解绑
		$once()只绑定一次
	innerText,innerHTML ,outerText ,outerHTML 的区别
		innerHTML 与outerHTML在设置对象的内容时包含的HTML会被解析,而innerText与outerText则不会
		在设置时,innerHTML与innerText仅设置标签内的文本,而outerText与outerHTML设置包括标签在内的文本
		outHTML和innerText(非W3)
	组件
		页面上的每一个部分都是组件
			结构
				template
			样式
				style
			逻辑
				script
		作用:复用
		组件的创建
			全局创建
				Vue.component()
					参数一:组件的名称  参数二:组件的配置项
						new Vue这个里面有什么参数。那么组件的配置项中就有什么
						组件内部多了一个属性 template
						组件内部的data不在是一个对象,而是一个函数
						直接将组件的名称当做标签使用即可,组件名称首字母必须大写
			局部创建
				components()
		脚手架的使用:
			安装
				3.0 cnpm install @vue/cli -g
				2.9.3 cnpm install vue-cli -g
			创建项目
				3.0 vue create <项目的名称>
				2.9.3 vue initwebpack <项目名称>
		组件的传值
			父传子
				传递方:当子组件在父组件中当做标签使用的时候,通过给子组件绑定一个自定义属性,值为需要传递的数据
				接收:在子组件内部通过props进行接收
					一种是数组接收
					一种是对象接收
						一般情况下我们使用对象进行接收,因为对象接收可以校验数据的类型
			子传父
				传递:当子组件给父组件传递数据的时候,通过调用父组件给子组件绑定的自定义事件,然后将值传递过去
				接收:父组件通过自定义事件的函数来接收子组件传递过来的数据。*这个自定义方法的函数在绑定的时候不需要加()
			非父子
				在vue的原型身上添加一个公共的vue实例,组件之间调用这个公共的实例的$on,$emit来传递数据,传递一方调用$emit,接收一方调用$on
				EventBus
					手动封装$on $emit $off (原理应用了观察者模式)
				vueX
		动态组件
			多个组件通过同一个挂载点进行组件的切换,is的值是哪个组件的名称,那么页面就会显示哪个组件
		内置组件keep-alive
			(内置组件不会被渲染到页面上)
			作用:可以让前或者路由不经历创建和销毁,而是进行缓存
			凡是被keep-alive组件包裹的组件,除了第一次以外,不会经历创建和销毁阶段的,第一次创建后就会缓存到缓存当中
			多了两个生命周期:
				activated(活跃状态)
					如果当前页面是一个显示状态,那么activated这个生命周期就会被触发
				deactivated(缓存状态)
					如果当前页面是一个非显示状态,那么deactivated这个生命周期就会被触发
			keep-alive的属性
				include
					只包含哪些组件进入缓存
				exclude
					排除哪些组件进入缓存
				max
					内存中最多可以存放多少个组件
	组件
		页面上的每一个部分都是组件
			结构
				template
			样式
				style
			逻辑
				script
		作用:复用
		组件的创建
			全局创建
				Vue.component()
					参数一:组件的名称  参数二:组件的配置项
						new Vue这个里面有什么参数。那么组件的配置项中就有什么
						组件内部多了一个属性 template
						组件内部的data不在是一个对象,而是一个函数
						直接将组件的名称当做标签使用即可,组件名称首字母必须大写
			局部创建
				components()
		脚手架的使用:
			安装
				3.0 cnpm install @vue/cli -g
				2.9.3 cnpm install vue-cli -g
			创建项目
				3.0 vue create <项目的名称>
				2.9.3 vue initwebpack <项目名称>
		组件的传值
			父传子
				传递方:当子组件在父组件中当做标签使用的时候,通过给子组件绑定一个自定义属性,值为需要传递的数据
				接收:在子组件内部通过props进行接收
					一种是数组接收
					一种是对象接收
						一般情况下我们使用对象进行接收,因为对象接收可以校验数据的类型
			子传父
				传递:当子组件给父组件传递数据的时候,通过调用父组件给子组件绑定的自定义事件,然后将值传递过去
				接收:父组件通过自定义事件的函数来接收子组件传递过来的数据。*这个自定义方法的函数在绑定的时候不需要加()
			非父子
				在vue的原型身上添加一个公共的vue实例,组件之间调用这个公共的实例的$on,$emit来传递数据,传递一方调用$emit,接收一方调用$on
				EventBus
					手动封装$on $emit $off (原理应用了观察者模式)
				vueX
		动态组件
			多个组件通过同一个挂载点进行组件的切换,is的值是哪个组件的名称,那么页面就会显示哪个组件
		内置组件keep-alive
			(内置组件不会被渲染到页面上)
			作用:可以让前或者路由不经历创建和销毁,而是进行缓存
			凡是被keep-alive组件包裹的组件,除了第一次以外,不会经历创建和销毁阶段的,第一次创建后就会缓存到缓存当中
			多了两个生命周期:
				activated(活跃状态)
					如果当前页面是一个显示状态,那么activated这个生命周期就会被触发
				deactivated(缓存状态)
					如果当前页面是一个非显示状态,那么deactivated这个生命周期就会被触发
			keep-alive的属性
				include
					只包含哪些组件进入缓存
				exclude
					排除哪些组件进入缓存
				max
					内存中最多可以存放多少个组件
	插槽
		组件标签包裹的元素默认是不会显示的,如果想要进行显示,那么就需要用到了插槽
			具名插槽(带名字的插槽)
				在组件内部进行接收的时候《slot>  通过name属性来去接收,例如:<slot name="back">
				组件标签内部的元素如果加上slot属性。那么当前插槽就是一个具名插槽了,例如:<p slot="back">
			匿名插槽
				在组件内部通过slot进行接收,就可以显示了,slot默认会接受所有的元素,但是除了具名插槽外
		作用域:子传父 
		反向传值
			将子组件的数据传递给父组件,只需要给组件内部的slot绑定一个自定义属性 。给自己的页面:<slot :自定义属性名 = 要传的值>
			在父组件中,子组件标签的内部书写一个template标签,通过scope来接收子组件传递过来的数据。app页面:<template scope="a">
	动画
		1.如果需要让一个元素进行动画展示的时候,那么当前元素/组件必须通过v-if/v-show动态组件来显示隐藏
		2.如果需要添加动态的元素,外层必须包裹一个内置组件<transition>
		3.transtion会有一个name属性,当前name属性的值为动画的类名
			动画类名的划分
				enter
					<name>-enter
					<name>-enter-active
						过渡,动画的类型,时间,延迟
					<name>-enter-to
				leave
					<name>-leave
					<name>-leave-active
						过渡,动画的类型,时间,延迟
					<name>-leave-to
		4.如果需要多个元素一起加动画的时候需要将transition组件换成transition-group,除此之外每个元素身上必须有一个唯一的标识key
		5.transition当前内置组件可以给动画提前定义类名
			<transition
    enter-class=""
    enter-active-class = ""
    enter-to-class=""
    ></transition>
		动画库(swiper)
			用法:先下载Animate.css
				 
	路由
		根据用户请求的路径或参数返回不同的页面或者数据
			路由常用的配置项
				path:路由请求的路径
				component:路径匹配成功后需要渲染的组件或者页面
			路由跳转的方式:
				1.<a href = "#/home"></a>
				2.<router-link to="/home"></router-link>
					to的路径会与path进行匹配,如果匹配成功会渲染component对应的组件
			组件怎样才能在页面上进行展示,必须依赖一个内置组件
				<router-view></router-view>展示路径匹配成功后相对应的组件
	自由主题
	自由主题
	自由主题
	自由主题
	自由主题
	自由主题
	自由主题
vue的详细介绍
MVVM框架		M:model层  数据层  做数据的增删改查		V:view视图层  类似于html的模板		VM:viewmodel映射层 model层与
							
 
										 
										 
										