实现应用中局部功能代码和资源的集合,提高复用性。
非单文件组件:一个文件中包含有n个组件,单文件组件:一个文件中只包含一个组件。
本质是一个VueComponent的构造函数,且是由Vue.extend生成的。
vc和vm极其相似,但并不是同一个东西,vm可以通过el决定根容器,vc则不能。
通过Vue.extend({配置项})创建。注意,配置项与vue实例略有不同:
嵌套式组件即多次嵌套调用component
一个重要的内置关系:VueComponent.prototype._ proto _===Vue.prototype,实例的隐式原型属性永远指向构造函数的显示原型对象,让组件实例对象可以访问到Vue原型上的属性、方法。
在后缀.vue的文件中写入三个标签< template (组件的结构)>、< script(组件交互相关的代码) >、< style(组件的样式)>。
(注:vscode默认无法识别.vue文件,需要下载插件来实现对.vue文件中内容的校验)
import Vue from 'vue’中引用的vue并非完整版本,其中并不含有template渲染功能,此处render函数主动调用渲染,用法:render(){return 需要添加的内容},最终可简化为render:h=>h(App)(已声明import App from ‘./App.vue’)
被用来给元素或子组件注册引用信息,将ref属性加在标签上,可使其被vue实例收集,赋于vue实例的ref中,通过this.$refs.ref属性名获取,便于对实例进行操作,可替代原始html语句getElementById。
(注意,当标签为组件时,与getElementById获取到的不同,ref获取到的是VueComponent实例,而getElementById获取到的是真实dom元素)
获取父组件传递给子组件的数值。
可以把多个组件共用的配置提取成一个混入对象,提高复用性。
使用方式:
创建一个新的js文件,如mixin.js
加在style标签中:
1.最基础方式实现:
通过共同父组件实现,子组件通过调用props中父组件传入的方法进行传参,父组件中定义的方法被调用并获取到了所传参数,此时可进行赋值或传参给另一子组件,实现兄弟组件传参。
2.待续
1.localStorage
浏览器存储,当关闭浏览器时不会刷新,由浏览器设置一定时间清空或自行清空。
存值:localStorage.setItem(key,value),(注意:key和value都需要是字符串,value传数字时也会自动变为字符串)
取值:localStorage.getItem(key),返回value,若不存在该key,则返回null
删除:localStorage.removeItem(key)
清空:localStorage.clear()
2.sessionStorage
会话存储,浏览器关闭时清空。方法同上。
适用于通信:子组件==>父组件
1.绑定
父组件在组件标签中通过v-on绑定一个事件,子组件中通过调用this.$emit(‘事件名’,参数)来调用。
(注意:事件中的this指向,要么将回调定义在methods中,要么在回调定义时使用箭头函数,如果使用普通function函数,this指向为调用 $emit的子组件,使用箭头函数时,事件中的this为定义事件的父组件。)
ref时通过this. $refs.student. $on来定义事件,若只使用一次,则调用 $once
2.解绑
this. $off(‘事件名’),解绑单个自定义事件。
this. $off([‘xxx’,‘xxx’]),解绑多个自定义事件。
this. $off(),解绑全部自定义事件。
(this. $destroy()调用实例销毁后,所有的自定义事件也失效了)
3.为组件赋原生事件时,如click,不能直接写@click=“xxx”,此时会被认为是自定义事件需借助this. $emit来调用,若要使用原生事件,则加上.native,如@click.native='“xxx”。
5. 最好在beforeDestroy钩子函数中,用$off去解绑当前组件所用到的事件。
访问终端的多个方式:
让父组件可以向子组件指定位置插入html结构。
template标签不会在页面中进行渲染显示,可以使用该标签在html代码中定义一个模板节点
直接在组件中写 一个< slot>占个坑,在调用组件的地方,如category组件,< category>< /category>标签中写入元素,此时其中的元素会代替slot。
当有多个元素需要加入组件时,通过slot中name标签来命名,并在使用时在添加的元素中写入属性slot=“slot名”。
数据在< slot>所在的组件中生成,且通过slot标签传递至具体结构处使用。(scope="xxx"是旧方法,slot-scope是新方法,功能一样)
专门在Vue中实现集中式状态管理的一个Vue插件,对Vue中多个组件的共享状态进行集中式的管理(读/写)。
使用场景:1. 多个组件依赖于同一个状态。 2. 来自不同组件的行为需要变更同一个状态
概念:当state中的数据需要经过加工后再使用时,可以使用getters加工。
在store.js中追加getters配置
组件中读取数据:$ store.getters.bigSum
便于获取的store属性,写在computed中。
数组写法中生成的名称与读取数据的名称相同。即sum…
mapGetter类似。
需写在methods中,且返回为函数,当调用时不传参则会默认传相应事件。
让代码更好维护,让多种数据分类更加明确。
实现SPA(single page web application)应用,整个页面只有一个网页,展示区随导航变化,但页面没有刷新抖动。浏览器路径也会相应变化。
将子路由写在父路由的children标签中(注意:此时会自动加一个斜杠,无需在子路由中再加上斜杠)
第三种写法中也可以运用解构赋值,将$ route写为{ query}
作用:控制路由跳转时操作浏览器历史记录的模式
不借助router-link实现路由跳转,而使用router的多个api
< keep-alive>框住的router-view当切换时不会destroy之前的组件,写入属性include=“组件名"或:include=”[‘xx’,‘xx’]"则指明缓存的组件名,不写则默认其中的组件都缓存。
用于捕获路由组件的激活状态,适用于缓存路由组件中无法调用beforeDestroy时。
写在路由配置js文件中,初始化的时候被调用、每次路由切换之前被调用
初始化时被调用、每次路由切换后被调用。其中没有next,其他与前置路由守卫类似。
单独处理某一组件的逻辑,写在组件当中而不是路由配置js文件中。不算是前置和后置,并不是某个事件前后调用。