Vue考核中知识点

Vue中的MVVM

(1)View

View是视图层, 也就是用户界面。

(2)Model

Model是指数据模型, 泛指后端进行的各种业务逻辑处理和数据操控, 主要围绕数据库系统展开。

(3)ViewModel

ViewModel是由前端开发人员组织生成和维护的视图数据层。在这一层, 前端开发者对从后端获取的Model数据进行转换处理, 做二次封装, 以生成符合View层使用预期的视图数据模型。

生命周期

简介生命周期

Vue 实例有⼀个完整的⽣命周期,也就是从new Vue()、初始化事件(.once事件)和生命周期、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。

先来一张尚硅谷的图:
在这里插入图片描述

  1. beforeCreate(创建前):数据监测(getter和setter)和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。
  2. created(创建后):实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到 DOM,所以不能访问到 $el属性。
  3. beforeMount(挂载前):在挂载开始之前被调用,相关的render函数首次被调用。此阶段Vue开始解析模板,生成虚拟DOM存在内存中,还没有把虚拟DOM转换成真实DOM,插入页面中。所以网页不能显示解析好的内容。
  4. mounted(挂载后):在el被新创建的 vm.$el(就是真实DOM的拷贝)替换,并挂载到实例上去之后调用(将内存中的虚拟DOM转为真实DOM,真实DOM插入页面)。此时页面中呈现的是经过Vue编译的DOM,这时在这个钩子函数中对DOM的操作可以有效,但要尽量避免。一般在这个阶段进行:开启定时器,发送网络请求,订阅消息,绑定自定义事件等等
  5. beforeUpdate(更新前):响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染(数据是新的,但页面是旧的,页面和数据没保持同步呢)。
  6. updated(更新后) :在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时 DOM 已经根据响应式数据的变化更新了。调用时,组件 DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
  7. beforeDestroy(销毁前):实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。在这个阶段一般进行关闭定时器,取消订阅消息,解绑自定义事件。
  8. destroyed(销毁后):实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。

全局API

Vue.extend

Vue.extend( options ) 拓展构造器 。用法,使用基础 Vue 构造器,创建一个“子类”。

需要注意 - 在 Vue.extend() 中它必须是函数

Vue.use

安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。

该方法需要在调用 new Vue() 之前被调用。

当 install 方法被同一个插件多次调用,插件将只会被安装一次。

路由

route,router,routes的区别

  1. route

​ 单个路由,或者某一个路由,是一个跳转的路由对象,一个局部对象

  1. routes

​ 多个路由的集合,多个跳转的路由对象集合,多个局部对象

  1. router

​ 路由器,路由管理者,router是VueRouter的实例,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由包含了许多关键的对象和属性

$router 与 $route的区别

$router是路由管理器中的一个对象,通过vue.use(vueRouter)和构造函数得到的一个全局对象router 它包含了所有的路由 也包含了许多关键的对象跟属性,控制路由跳转

this.$router.push({path:“”})

this.$router.replace({path:“”})

r o u t e 是路由跳转中的对象是一个局部对象每一个路由都有一个 route 是路由跳转中的对象 是一个局部对象 每一个路由都有一个 route是路由跳转中的对象是一个局部对象每一个路由都有一个route对象 可以获取当前页面路由对象 name path params query routerr等

路由守卫

作用:

对路由进行权限控制,路由守卫是路由在跳转前、后过程中的一些钩子函数,这些函数可以让你操作一些其他的事,在后台管理中设置权限时经常看到,在实现路由跳转前校验是否有权限,有权限就可以通过,反之就会被执行其他操作,如返回首页。

分类

全局守卫、独享守卫、组件内守卫

#路由守卫参数:

to:目标路由对象

from:即将要离开的路由对象

next():放行

1.全局守卫:

所有的路由切换都会执行,一般写在路由配置文件中

router.beforeEach(fn) :to\from\next()

router.afterEach(fn):to\from

router.beforeResolve(fn):to\from\next()

2.组件守卫:

beforeRouteEnter(fn):to\from\next() #在渲染该组件的对应路由被confirm前调用,不能获取组件实例,因此无法this

beforeRouteUpdate(fn):to\from\next()

beforeRouteLeave(fn):to\from\next()

3.路由独享守卫:

一般写在路由配置中

beforeEnter(fn):to\from\next()

组件化开发和模块化开发

组件化开发

所谓组件化,就是把页面拆分为多个组件, 每个组件依赖的CSS、JS、模板、图片等资源放在一起开发和维护

优势:

**高内聚性:**组件功能 必须是完整的 如果我要实现下拉菜单功能现在下拉菜单这个组件中 就把下拉菜单 所需要的功能全部实现

**底耦合度:**代码独立不会和项目不会与其他的代码发生冲突 在实际工作中,我们经常会涉及到团队协作按照传统业务去编写代码的方式 就很容易相互冲突,所以运用组件方式化就可以大大避免这种冲突的存在,每一个组件都有自己清晰的职责 完整的功能 较低的耦合度便于单元测试和重复利用

标记鲜明,容易维护:组件化后,我们只需要 对对应的组件进行维护 不会影响到其他组件 而且文件结构清楚,方便后台人员的使用

**组件化结构,并且方便扩展:**组件功能必须是完整的,如果我要实现下拉菜单功能

模块化开发

文件的组织 管理 使用 等方式 ,即把一个大的文件拆分成几个小的文件 他们之间相互引用、依赖。

优势

1.避免繁杂的命名冲突

2.更好的分离,按需加载

3.具有良好的复用性

4.方便维护

区别

模块化:是从代码逻辑的角度进行划分;方便代码进行分层开发,保证每个功能模块的职能单一

组件化:是从UI界面的角度进行划分,前端的组件化,方便UI组件的复用

VUEX

原理图:

概念

​ 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

何时使用?

​ 多个组件需要共享数据时

State

提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,相似与data

Mutation

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数

Action ——进行异步操作

Action和Mutation相似,Mutation 不能进行异步操作,若要进行异步操作,就得使用Action

Getter

类似于vue中的computed,进行缓存,对于Store中的数据进行加工处理形成新的数据

具体操作类似于前几种,这里不做具体说明

Modules

当遇见大型项目时,数据量大,store就会显得很臃肿

为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割

组件间通信方式

  1. props是父传子,子组件通过props属性来接受数据
  2. this.$emit(‘methodName’,params)是子通过触发父组件中的函数传给父组件数据
  3. 消息订阅与发布是一种任意间组件通信方式,先在需要接受数据的组件中订阅消息(pubsub.subscribe(‘xxx’,callback)),然后在需要传数据的组件中发布(pubsub.publish(‘xxx’,params)),以上两步就是消息的订阅与发布。最终最好在beforeDestroy()钩子中取消订阅(pubsub.unsubscribe(pubId))
  4. 全局事件总线是一种任意间组件通信方式,这个需要在Vue的原型对象身上绑定一个‘东西’(官方叫做$bus),原因是上面我提到的‘Vue中一个重要的内置关系’,理解之后,全局事件总线的原理也就直接懂了
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值