# Vue教程
**Repository Path**: GD03290506/Vue
## Basic Information
- **Project Name**: Vue教程
- **Description**: 渐进式JavaScript 框架(Vue练习)
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-08-27
- **Last Updated**: 2022-05-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 笔记
## 脚手架结构:
|-- public
| |-- favicon.ico 页签图标
| |-- index.html 主页面
|-- src(工程中每个案例文件夹的名字变为src即可执行)
|-- App.vue 汇总所有组件
|-- main.js 入口文件
|-- assets 存放静态资源
| |-- logo.png
|-- components 存放组件
|-- School.vue
|-- Student.vue
|-- .gitignore git版本控制忽略的配置
|-- babel.config.js babel的配置文件
|-- package-lock.json 应用包配置文件
|-- package.json 包版本控制文件
|-- README.md 应用描述文件(改工程中为脚手架笔记)
## 关于不同版本的Vue:
- (1).Vue.js是完整版的Vue,包含核心功能+模板解析器
- (2).Vue.runtime..xxx.js没有模板解析器,所以不能使用- -template配置项,需要使用
render函数接受到createElement函数去指定类容
## vue.config.js配置文件
> 使用vue inspect > output.js可以查看vue脚手架下的默认配置
>
> 使用vue.config.js可以对脚手架进行个性化定制,详情见:https://cli.vuejs.org/zh/config/
## ref属性
1.被用来给元素或者子组件注册引用信息(id的代替者)
2.应用在html标签上获取真实DOM元素,应用在组件标签上是组件实例对象(vc)
3.使用方式
打标识:
或者
获取:this.$refs.title
## 配置props
功能:让组件接受外部传过来的数据
(1) 传递数据:
(2)接受数据:
第一种方式(只接受)
```
props:['name','age','sex']
```
第二种方式(限制类型)
```vue
props:{
name:String,
age: Number,
sex: String
}
```
第三种方式(接受的同时,对类型进行限制,默认值的指定,必要性的限定)
```vue
props:{
name: {
type: String, //name的类型是字符串
required: true, //name是必传的
},
age: {
type: Number,
default: 50, //默认值
},
sex: {
type: String,
required: true,
},
},
```
备注:props是只读的,vue底层会监视你对props的修改,如果进行了修改,就会发出警告,若业务需求要改, 请赋值一份props的内容到data中一份,然后修改data中的数据
## mixin(混入)
功能:可以把多个组件公用的配置提取成一个混入对象
第一步:定义混合
```
export const mixin = { //export暴露
methods: {
showName(){
alert(this.name)
}
}
}
```
第二步:引入混合
```
import {mixin} from './mixin'
```
第三步:使用混入
- 全局混入:
```
main.js
import {mixin} from './mixin'
/* 全局配置混合 */
Vue.mixin(mixin)
```
- 局部混入
```
import {mixin} from '../mixin.js'
export default {
name:'Student',
data() {
return {
name:'张三',
age:16
}
},
mixins:[mixin]
}
```
## 插件
功能:用于增强vue
本质:包含install方法的一个对象,install的第一个参数是vue,第二个参数是插件使用者传递的数据
定义插件:
```vue
export default{
install(Vue,options){
console.log('@@@install',Vue);
/* 配置全局过滤器 */
Vue.filter('myslices',function(value){
return value.slice(0,4)
})
/* 定义混合 */
Vue.mixin({
data() {
return {
x:100,
y:200
}
},
})
/*给Vue原型上添加一个方法(vm。vc就都能用了)*/
Vue.prototype.hello = () =>{
alert('你好啊')
}
}
}
```
使用插件:
```
/* 使用插件 */
Vue.use(plugins);
```
## scoped样式
作用:让样式在局部生效,防止冲突
写法:
```css
```
## 组件化编码流程
<1>.实现动态组件:抽取组件,使用组件实现静态页面效果
<2>.展示动态数据:
(1).数据的类型,名称是什么?
(2).数据保存在那个组件?
<3>.交互-从绑定事件监听开始
## nanoid 生成为唯一id
## 总结TodoList案例
1.组件化编码流程
(1)、拆分静态组件:组件按照功能点拆分,命名不要与html有冲突
(2)、实现动态组件:考虑好数据的存放位置,数据是一个组件在用还是一些组件在用:
- 一个组件在用:放在组件自生即可
- 一些组件在用:放在他们共同的父组件上(状态提升)
(3)、实现交互,从绑定事件开始
2.props适用于:
父组件 ==> 子组件 通信
子组件 ==> 父组件 (要求父先给子一个函数)
3.使用v-model时要切记:v-model要绑定的值不能是props传过来的值,因为props是不可以被修改的
4.props传过来的要是对象类型的值,修改对象中的属性时Vue不会报错,但不推荐这样做
## webStorage(浏览器的本地存储)
1.存储内容大小一般支持5MB左右(不同的浏览器可能不一样)
2.浏览器通过window.sessionStorage 和 window.localStorage属性来实现本地缓存机制
3.相关API
(1)、XXXStorage.setItem('key','value')
该方法接受一个键和值作为参数,会把键值对添加到存储中,如果键名存在,则更新其对应的值
(2)、XXXStorage.getItem('key')
该方法接受一个键名,作为为参数,返回键名对应的值
(3)、XXXStorage.removeItem('key')
该方法接受一个键名,作为为参数,把该键值对从存储中移除
(4)、localStorage.clear()
该方法会清空存储中所有的数据
4、备注
(1)、sessionStorage 存储的内容会随着浏览器的关闭而消失
(2)、localStorage 需要手动清除才会消失
(3)、如果XXXStorage.getItem('key'),如果key对应的值获取不到,就会返回null
(4)、JSON.parse(null) 的返回还是null
## 组件的自定义事件
1.一种组件见的通信方式,适用于:父组件===>子组件''
2.使用场景:A是父组件,B是子组件,B给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)
3.绑定自定义事件
- 第一种方式,在父组件中:
```
或
```
- 第二种方式,在父组件中:
```
.....
mounted(){
//先用ref获取组件实例对象(VC),在给组件实例对象绑定自定义事件
// this.$refs.student.$on('atguigu',this.getStudentName)
// this.$refs.student.$once('atguigu',this.getStudentName) //只触发一次事件
}
```
- 若想让事件触发一次,可使用once修饰符,或$once
4.触发自定义事件:
```
//触发student组件实例身上的atguigu事件
this.$emit('atguigu',this.name) //$emit触发自定义事件
this.$emit('demo',this.name)
```
5.解绑自定义事件:
```
this.$off('atguigu'); //适用于解绑一个自定义事件
// this.$off(['atguigu','demo']); //适用于解绑一个自定义事件
// this.$off();//所有自定义事件都被解绑
```
6.组件上也可以绑定原生的DOM事件,需要使用native修饰符
7.注意:通过this.$ref.xxx.$on('atguigu',回调)绑定自定义事件时,回调要么配置在methods中,要么用箭头函数,否则this指向会出问题
## 全局事件总线(globalEventBus)
1.一种组件间的通信方式,适用于任何组件间的通信
2.安装全局事件总线:
```
new Vue({
.....
beforeCreate() { //改生命周期函数执行时,页面还没解析
Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
},
}).$mount('#app')
```
3.使用事件总线:
1.接受数据:A组件想接受数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身
```
methods:{
demo(data){.....}
},
mmounted(){
this.$bus.$on('xxx', this.demo)
}
```
2.提供数据:
```
this.$bus.$emit('xxx', 数据);
```