vue2.0和3.0适应大屏方法总结

项目有适应大屏显示的需求,查了很多资料,最终选择通过px2rem插件配合flexible.js来解决,下面分别是在vue-cli2.0和vue-cli3.0中的配置:

一、准备flexible

    1.使用flexible插件

安装lib-flexible

npm install --save lib-flexible

在项目入口文件main.js中引入lib-flexible:

import 'lib-flexible/flexible.js'

 2.自定义flexible.js

找了份flexible.js自己做了小改动,当窗口大小小于1200px时不再进行缩放,以下是相关代码:

(function flexible(window, document) {
  var docEl = document.documentElement;
  var dpr = window.devicePixelRatio || 1;

  // adjust body font size
  function setBodyFontSize() {
    if (document.body) {
      document.body.style.fontSize = 12 * dpr + "px";
    } else {
      document.addEventListener("DOMContentLoaded", setBodyFontSize);
    }
  }
  setBodyFontSize();

  // set 1rem = viewWidth / 10
  function setRemUnit() {
    if (docEl.clientWidth >= 1200) {
      //窗口大小小于1200px则不在改变根字体大小
      var rem = docEl.clientWidth / 10;
      docEl.style.fontSize = rem + "px";
    }
  }

  setRemUnit();

  // reset rem unit on page resize
  window.addEventListener("resize", setRemUnit);
  window.addEventListener("pageshow", function(e) {
    if (e.persisted) {
      setRemUnit();
    }
  });

  // detect 0.5px supports
  if (dpr >= 2) {
    var fakeBody = document.createElement("body");
    var testElement = document.createElement("div");
    testElement.style.border = ".5px solid transparent";
    fakeBody.appendChild(testElement);
    docEl.appendChild(fakeBody);
    if (testElement.offsetHeight === 1) {
      docEl.classList.add("hairlines");
    }
    docEl.removeChild(fakeBody);
  }
})(window, document);

在项目入口文件main.js中引入flexible.js

import "./utils/flexible"; 

二、安装postcss-loaderpostcss-px2rem: 

npm install --save-dev postcss-loader postcss-px2rem

三、在项目public目录的index.html头部加入手机端适配的meta的代码:

<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0,minimum=1.0,user-scalable=no"> 

四、vue.cli2.0中的配置

在build文件夹的utils.js里,增加如下配置:

//增加px2rem配置
  const px2remLoader = {
    loader: "px2rem-loader",
    options: {
      remUnit: 192 //设计稿宽度的1/10,
    }
  };

五、在vue-cli3.0中的配置:

在根目录下的配制文件vue.config.js,配制如下信息 (没有该文件则创建):

 chainWebpack: config => {
    config.module
    .rule('scss')
    .oneOf('vue')
    .use('px2rem-loader')
    .loader('px2rem-loader')
    .before('postcss-loader') // this makes it work.
    .options({ remUnit: 192, remPrecision: 8 }) //1920/10
    .end()
  },

六、重新启动

<think>好的,用户想了解Vue 2.03.0生命周期钩子的区别对应关系。首先,我需要回顾一下两个版本的生命周期相关知识。根据提供的引用内容,Vue 3.0在生命周期钩子的命名使用方式上有变化,比如钩子名称前加上了“on”,并且使用了Composition API。 首先,我要整理Vue 2.0的生命周期钩子。根据引用[2],Vue2.0的钩子包括beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed。而Vue3.0中,引用[1][3]提到,钩子名称发生了变化,例如beforeDestroydestroyed变为onBeforeUnmountonUnmounted。同时,Vue3.0引入了setup函数,替代了之前的beforeCreatecreated,这两个钩子在3.0中不再使用,而是通过setup内部代码来执行。 接下来,我需要对比两者的对应关系。比如,beforeCreatecreated在Vue3.0中被setup替代,其他钩子如beforeMount对应onBeforeMount,mounted对应onMounted,等等。需要注意的是,Vue3.0中beforeDestroydestroyed被重命名为onBeforeUnmountonUnmounted,这是用户容易混淆的地方。 另外,用户可能关心使用方式的变化。Vue3.0中使用Composition API,在setup函数中注册生命周期钩子,比如onMounted(() => { ... })。而Vue2.0则是通过选项式API,在组件选项中直接定义钩子函数。这一点需要明确说明。 还需要注意,Vue3.0保留了部分钩子名称,如errorCaptured,但新增了服务器端渲染相关的钩子如renderTrackedrenderTriggered,这些可能是用户不太熟悉的部分,可以简要提及。 最后,确保回答结构清晰,分点列出差异,可能用表格形式更直观。同时,根据用户提供的引用内容,正确标注引用来源,如引用[1]、[2]、[3]。需要检查是否有遗漏的钩子或错误对应关系,确保准确性。</think>### Vue 2.0Vue 3.0生命周期钩子的差异及对应关系 #### 1. **生命周期钩子命名变化** Vue 3.0的钩子函数名称统一添加了`on`前缀,并通过Composition API显式调用[^3]: - Vue 2.0的`beforeCreate``created`被**合并到`setup`函数**中,不再作为独立钩子存在[^1]。 - `beforeMount` → `onBeforeMount` - `mounted` → `onMounted` - `beforeUpdate` → `onBeforeUpdate` - `updated` → `onUpdated` - `beforeDestroy` → `onBeforeUnmount` - `destroyed` → `onUnmounted` - `errorCaptured` → `onErrorCaptured`(保留名称,但需通过API调用) #### 2. **使用方式差异** - **Vue 2.0**:通过选项式API直接定义钩子函数: ```javascript export default { created() { /* ... */ }, mounted() { /* ... */ } } ``` - **Vue 3.0**:需在`setup`函数中使用Composition API显式调用[^3]: ```javascript import { onMounted } from &#39;vue&#39;; export default { setup() { onMounted(() => { /* ... */ }); } } ``` #### 3. **新增生命周期钩子** Vue 3.0新增了与响应式调试服务器端渲染相关的钩子: - `onRenderTracked`:追踪响应式依赖时触发。 - `onRenderTriggered`:响应式依赖变更触发重新渲染时调用。 - `onServerPrefetch`:服务器端渲染时用于异步数据预获取[^3]。 #### 4. **对应关系表格** | Vue 2.0 | Vue 3.0 | 说明 | |-------------------|-----------------------|-------------------------------| | `beforeCreate` | `setup()`内部代码 | 被`setup`函数替代 | | `created` | `setup()`内部代码 | 被`setup`函数替代 | | `beforeMount` | `onBeforeMount` | 挂载前触发 | | `mounted` | `onMounted` | 挂载完成后触发 | | `beforeUpdate` | `onBeforeUpdate` | 数据更新前触发 | | `updated` | `onUpdated` | 数据更新后触发 | | `beforeDestroy` | `onBeforeUnmount` | 组件卸载前触发(名称变更) | | `destroyed` | `onUnmounted` | 组件卸载后触发(名称变更) | | `errorCaptured` | `onErrorCaptured` | 错误捕获功能保留 | #### 5. **核心差异总结** - **设计理念**:Vue 3.0通过Composition API实现逻辑复用,生命周期更灵活[^2]。 - **兼容性**:Vue 3.0支持选项式API,但推荐使用Composition API注册钩子。 - **功能扩展**:新增的钩子(如`onRenderTracked`)增强了调试能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值