MVVM 是 Model-View-ViewModel 缩写,也就是把 MVC 中的 Controller 演变成 ViewModel。Model 层代表数据模型,View 代表 UI 组件,
ViewModel 是 View 和 Model 层的桥梁,数据会绑定到 viewModel 层并自动将数据渲染到页面中,视图变化的时候会通知 viewModel 层更新数据。
1 初始化前 --BeforeCreated
2 初始化完成 ---***:发送ajax --created //比较常用
3 双向数据绑定前 ---BeforeMount
4 双向数据绑定完成 --Mounted
5 更新前 --BeforeUpdate
6 更新完成--updated
7 销毁前--BeforeDestroyed
8 销毁完成--Destroyed
Vue 采用数据劫持+订阅发布模式实现双向绑定。通过 Object.defineProperty()方法来为组件中 data 的每个属性添加 get 和 set 方法,在数据变动时,触发 set 里相应的监听回调函数,将变动信息发布给订阅者
v-model本质就是一个语法糖,可以看成是value + input方法的语法糖。 可以通过model属性的prop和event属性来进行自定义。原生的v-model,会根据标签的不同生成不同的事件和属性。
v-on原生事件绑定是通过 addEventListener 绑定给真实元素的,组件事件绑定是通过 Vue 自定义的$on 实现的
1.computed是计算属性,依赖其他属性值,并且computed的值有缓存。只有computed依赖的属性值发生变化,computed的值才会重新计算。
运用场景:一个数据属性在它所依赖的属性发生变化时,也要发生变化。对于任何复杂逻辑,你都应当使用计算属性。
2.watch:没有缓存性,起到观察的作用,即监听数据的变化。watch为一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。
运用场景:侦听一个数的变化,当该数据变化,来处理其他与之相关数据的变化,即一个数据影响别的多个数据。
3.methods:定义函数,它需要手动调用才能执行
<p>{{money | moneyFilters}}</p>
filters: { moneyFilters(value) { return "¥" + Number(value).toFixed(2) } },
自定义指令
Vue.directive('focus', (a,b)=>{ a.textContent = b.value.toUpperCase() })
全局前置守卫 router.beforeEach
全局后置钩子 router.afterEach
组件内的守卫 beforeRouteEnter
、beforeRouteUpdate
、beforeRouteLeave
8.data为什么是一个函数
一个组件被复用多次的话,也就会创建多个实例。本质上,这些实例用的都是同一个构造函数。如果 data 是对象的话,对象属于引用类型,会影响到所有的实例。
所以为了保证组件不同的实例之间 data 不冲突,data 必须是一个函数。
9.keep-alive 了解吗?
keep-alive 可以实现组件缓存,当组件切换时不会对当前组件进行卸载。
常用的两个属性 include/exclude,允许组件有条件的进行缓存。
10.组件之间的传值
父传子props 子传父$emit
{ path: '/xiangqing/:id', name: 'Xiangqing', component: () => import('../views/Xiangqing.vue') }
itemBnt(){ this.$router.push('/xiangqing/'+id) }
使用this.$route.params.id拿到传过去的id
vuex是状管理,有五个属性 State、 Getter、Mutation 、Action、 Module
state:在vuex中存放数据的地方。使用this.$store.state.count
getters:在vuex中的计算属性。使用this.$store.getters.evenOrOdd
mutations:在vuex主要处理同步操作,使用this.$store.commit('aaa')
actions:在vuex主要处理异步操作,使用this.$store.dispatch('aaa')