初始化脚手架
看同文集下 搭建vue开发环境
脚手架结构
-
main.js
整个项目的入口文件
//引入Vue import Vue from 'vue' //引入App组件 即所有组件的父组件 import App from './App' //引入路由 import router from './router' //关闭Vue的生产提示 Vue.config.productionTip = false //创建Vue实例对象--vm /* eslint-disable no-new */ new Vue({ //相当于尾部的(看下面↓) el: '#app', router, components: { App }, template: '
' })//.$mount('app') -
index.html
<%= htmlwebpackPlugin.options.title %>
render函数
用于不能使用template
配置项的情况
-
vue.js
与vue.runtime.xxx.js
的区别-
vue.js
是完整版的Vue
,包含:核心功能+模板解析器。 -
vue.runtime.xxx.js
是运行版的Vue
,只包含核心功能,没有模板解析器。
-
-
vue.runtime.xxx.js
没有模板解析器不能使用
template
配置项需要使用
render
函数接收到的createElement
函数去指定具体内容。
修改默认配置
执行
vue inspect > output.js
看Vue脚手架的默认配置。使用
vue.config.js
可以对脚手架进行个性化定制,详见: https://cli.vuejs.org/zh
ref属性与props配置
ref属性
被用来给元素或子组件注册引用信息(id的替代者)
-
应用在
html
标签上获取的是真实DOM元素应用在组件标签上是组件实例对象(vc)
-
使用方式
-
打标识:
或.....
-
获取:
this.$refs.xxx
-
props配置
-
功能
让组件接收外部传过来的数据
传递数据:
-
接收数据:
-
第一种方式(只接收)
props: [ 'name ']
-
第二种方式(限制类型)
props:{ name :Number }
-
第三种方式(限制类型、限制必要性、指定默认值)
props:{ name:{ type:String,//类型 required:true,//必要性 default:'老王’ //默认值 } }
-
-
备注:
props
是只读的Vue底层会监测对
props
的修改,如果进行了修改,就会发出警告若业务需求确实需要修改,那么可复制
props
的内容到data
中一份,然后去修改data
中的数据。
mixin混入
混合 = 复用配置
组件里如果有很多相同的配置,可以把相同的配置拎出来单独放,组件想要的时候直接引用就好 以达到高复用率
-
功能
可以把多个组件共用的配置提取成一个混入对象
-
使用方式
-
定义混合
例如
{ data(){...}, methods:{....} .... }
-
使用混入
-
全局混入
Vue.mixin(xxx)
全局混入的话要写在
main.js
文件里,先import
,然后调mixin
,再然后所有组件就都有这东西了 -
局部混入
mixins: ['xxx']
局部混入的话就哪个组件用哪个组件import,然后在vc里和data同级写一下mixins
-
-
插件 - plugins
本质上就是个对象 但是硬性要求必须包含一个install
方法
-
语法
Vue.use(插件名)
记得先引入嗷!
-
功能
用于增强Vue
-
本质
包含
install
方法的一个对象install
的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据 -
定义插件:
对象.install = function (Vue,options){ //1.添加全局过滤器 vue.filter(....) //2.添加全局指令 Vue.directive(....) //3.配置全局混入(合) Vue.mixin(.. ..) //4。添加实例方法 Vue.prototype.$myMethod = function () {...} Vue.prototype.$myProperty = xxxx }
scoped样式
如果不同组件里有相同类名 style
可能会出现冲突
两条裙子有一模一样的商品名 但一条是短裙一条是连衣裙
但是不要紧!我们js是自上而下执行代码的!就算类名相同style
不同 哪个最后执行就用哪个!
那要选哪条呢?哪条最后出现就选哪条
但是template
里有标签 script
里有引入 那执行顺序要按谁的来捏?Vue脚手架在解析vue文件的时候不看template
里先用谁 而是看谁最新被引入
可是有在货架上摆放的先后顺序 有拿衣服的先后顺序 这要怎么算捏?当然是看手里最后拿到的是哪条,而不是看货架
很时髦嗷这个vue
-
作用
让样式在局部生效,防止冲突。
-
写法
TodoMVC案例
组件化编码流程(通用)
-
实现静态组件
抽取组件,使用组件实现静态页面效果
先不用考虑交互
-
展示动态数据
2.1 数据的类型、名称
2.2 数据在组件中保存
交互 -- 从绑定事件监听开始
实现静态组件
-
拆分
组件要按照功能点拆分
- 添加事项区(header/add)
- 待办列表区(todos/list)
- 待办事项(item)
- 汇总区(footer)
-
命名
不要与html元素冲突
实现动态组件
考虑好数据的存放位置 数据是一个组件在用还是一些组件在用
-
单个组件使用
放在组件自身
-
多个组件使用
放在组件共同的父组件上
实现交互
从绑定事件开始
props适用范围
- 父组件 ==》 子组件 通信
- 子组件 ==》 父组件 通信
- 前提:父组件先给子组件一个函数
注意事项
使用v-model
v-model
绑定的值不能是props
所传值
props
值不能修改
props传值
props
传的若是对象类型的值,修改对象中的属性时Vue不会报错
但不推荐这样做
组件的自定义事件
-
一种组件间通信的方式
适用于: 子组件==>父组件
-
使用场景
A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)。
-
绑定自定义事件:
第一种方式,在父组件中:
或-
第二种方式,在父组件中:
...... mounted(){ this.$refs.xxx.$on( 'zidingy ' ,this.test) } 若想让自定义事件只能触发一次,可以使用
once
修饰符,或$once
方法。
-
触发自定义事件
this.$emit( 'zidingy ',数据)
-
解绑自定义事件
this.$off( 'zidingy ')
组件上也可以绑定原生DOM事件,需要使用
native
修饰符。注意:通过
this.$refs .xx. son('zidingy',回调)
绑定自定义事件时,回调要么配置在methods
中,要么用箭头函数,否则this
指向会出问题!
全局事件总线
可实现任意组件间通信
X ->外卖员,A,B -> 顾客,demo,test ->订单, D -> 商家,数据 -> 外卖
安装全局事件总线:
new Vue({
......
beforeCreate() {
Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
},
......
}
使用事件总线:
-
接收数据
A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。
methods(){ demo(data){......} } ...... mounted() { this.$bus.$on( 'xxxx',this.demo) }
-
提供数据
this.$bus.$emit( 'xxxx',数据)
解绑事件
- 最好在
beforeDestroy
钩子中,用$off
去解绑当前组件所用到的事件。
消息订阅与发布
—种组件间通信的方式,适用于任意组件间通信。
示例:报纸的订阅与发布
- 订阅报纸: 住址
- 邮递员派送报纸: 报纸
消息的订阅与发布
- 订阅消息:消息名
- 发布消息:消息内容
使用步骤
-
安装pubsub
npm i pubsub-js
-
引入
import ubsub from 'pubsub-js '
接收数据
-
A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。
methods(){ demo(data){......} } ...... mounted() { this.pid = pubsub.subscribe( 'xxx ' ,this.demo)// 订阅消息 }
-
提供数据
pubsub.publish( 'xxx',数据)
最好在
beforeDestroy
钩子中,用PubSub.unsubscribe(pid)
去取消订阅。
nextTick
-
语法
this.$nextTick(回调函数)
-
作用
在下一次DOM更新结束后执行其指定的回调。
什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在
nextTick
所指定的回调函数中执行。
过渡与动画
vue动画的理解
- 操作css的
transition
或animation
- vue会给目标元素添加/移除特定的
class
- 过渡的相关类名
vue封装的过渡与动画
动画效果
-
作用
在插入、更新或移除DOM元素时,在合适的时候给元素添加样式类名。
-
图示
-
写法
- 样式
- 元素进入的样式:
- v-enter:进入的起点
- v-enter-active:进入过程中
- v-enter-to:进入的终点
- 元素离开的样式
- v-leave:离开的起点
- v-leave-active:离开过程中
- v-leave-to:离开的终点
- 元素进入的样式:
- 样式
-
动画效果语法