Skip to content

Vue

Vue

通信方式

MVC

View 负责页面显示逻辑

Model 负责存储业务数据,以及相应数据操作

ControllerViewModal 的纽带

MVVM

ViewModel 通过双向绑定,将 ViewModel 的同步更新给自动化了

渐进式

视图刷新

修改数组或对象后,视图不更新的问题

解决方法:

  • Vue.set()

    js
    Vue.set(target, key, val)
  • $forcecUpdated()

    强制更新视图

异步更新

vue 的视图,dom 更新是异步的

$nextTick(callback)

js
let methods = {
  fn1() {
    this.list.push('new obj')
    fn()
    // 此时如果获取 dom 元素,结果则为更新前的结果
  },
  fn2() {
    this.list.push('new obj')
    this.list.push('new obj')
    this.list.push('new obj')

    this.$nextTick(() => {
      fn()
      // 此时如果获取 dom 元素,结果才是更新后的结果
      // 虽然数据多次更新,但 nextTick 只会触发一次回调
    })
  }
}

keep-alive

内置组件,组件缓存,避免重新渲染

钩子函数:activateddeactivated

SSR

Server-Side Rendering 服务端渲染

优点:

seo 优化

首屏渲染优化

其他:

Prerender SPA Plugin 预渲染

跨域

CORS

HTTP

Access-Control-Allow-Origin

后端实现,前端有浏览器自动完成

Proxy

开发环境

本地代理

js
// vue.config.js
module.exports = {
  devServer: {
    port: 8080,
    proxy: {
      '/api': {
        target: process.env.VUE_APP_SERVER_URL,
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/'
        }
      }
    }
  }
}

生产环境

通过配置 nginx 实现代理

JSONP

只能 get

axios

封装 axios

全局设置:请求头,超时时间

请求拦截器:携带 token

响应拦截器:处理错误

Router

Vuex

概览

一种状态管理模式

集中式存储管理应用的所有组件的状态

属性概括描述
state存储状态(data)单一状态树,唯一数据源,所以每个应用仅有一个 store 实例
getter计算属性(computed)
mutation方法(methods)修改状态 state 的唯一途径,同步操作
action调用 mutation实现异步操作,最终目的还是通过 mutation 修改状态 state
module模块化单一状态数不免过于庞大,拆分是为了更好的维护