vue 常用操作

一、多语言vue-i18n

    使用vue开发的网站如何支持多语言?如果vue网站想支持多语言我们可以选择 vue-i18n 下面介绍一下它在vue中的使用:
    1:使用npm安装      
        npm install vue-i18n -S
    2:挂载到vue实例

import Vue from 'vue'
import VueI18n from 'vue-i18n'

// install plugin
Vue.use(VueI18n)
Vue.config.lang = 'zh-cn'
Vue.locale('zh-cn', { message: '你好' })
Vue.locale('en', { message: 'hello' })

    3:模板使用
        <span>{{ $t('message') }}</span>
        或者也可以用在data中

export defaults {
  data () {
    return {
      hello: this.$t('message')
    }
  }
}

二、vue项目不同环境的配置

    在项目根目录下创建 .env .env.development .env.production 文件,里面可以配置VUE_APP_API_URL的不同值(通过process.env.API_URL获取)。只有NODE_ENV,VUE_APP_*,BASE_URL(和config中publicPath对应)可以直接使用
    可以在package.json配置scripts:{devbuild:'vue-cli-service build --mode development'}来指定环境。
    其他常量可以自定义不同配置文件来实现,创建在/config/(index.js development.js production.js)文件

// development.js
export const globalParam = {
  apibaseUrl: 'devUrl',
  key: 'dev'
};

// production.js
export const globalParam = {
  apibaseUrl: 'proUrl',
  key: 'pro'
};

// index.js 公共常量可以定义在这
const env = process.env;
const {globalParam} = require('@/config/' + process.env.NODE_ENV);
export {
  env,
  globalParam
}

// main.js
import * as env from '@/config/env'
import {globalParam} from '@/config/env'
Object.keys(env).forEach(key => {
  Vue.prototype[key] = env[key]
}); // 通过this.globalParam可调用

三、vue.config.js常用配置


const path = require('path');

module.exports = {
    // 公共路径部署二级路径下需要对应修改/x/,同时需配置VueRouter({base:'/x/',mode:'history'}),history时NG需配置location /x {index /index.html;try_files $uri $uri/ /x/index.html;}
    publicPath:'./',
    outputDir: process.env.NODE_ENV === "development" ? 'devdist' : 'dist', // 不同的环境打不同包名
    assetsDir: 'static', // 静态资源目录 (js, css, img, fonts)
    lintOnSave: true, // 是否开启eslint保存检测,有效值:ture | false | 'error'
    css: {  // 一次配置,全局使用,这个scss 因为每个文件都要引入
        loaderOptions: {
            sass: {
                data: `@import "./src/assets/hotcss/px2rem.scss";`
            }
        }
    },
    lintOnSave:false,  // 关闭eslint
    productionSourceMap:true,  // 生产环境下css 分离文件
    devServer:{   // 配置服务器
        host: '0.0.0.0',
        hotOnly: false,
        port:8081,
        open:true,
        https:false,
        overlay: {
            warnings: true,
            errors: true
        },
        proxy: null,
        // proxy: {
        //     '/api': {
        //         target: '<url>',
        //         ws: true,
        //         changOrigin: true
        //     }
        // },
        before: app => {}
    },
    // chainWebpack: config => { // 修改webpack配置
        // config.resolve.alias.set('@', path.resolve(__dirname, './src'))
    // },
    configureWebpack:{  // 覆盖webpack默认配置的都在这里
        resolve:{   // 配置解析别名
            alias:{
                '@':path.resolve(__dirname, './src'),
                '@h':path.resolve(__dirname, './src/assets/hotcss'),
                '@s':path.resolve(__dirname, './src/assets/style'),
                '@i':path.resolve(__dirname, './src/assets/images'),
            } 
        },
        plugins: [
          new CompressionPlugin({
            cache: false,                   // 编译后文件缓存 node_modules/.cache 为true会导致缓存越来越大
            test: /\.(js|css|woff|woff2|json|txt|html|ico|svg)(\?.*)?$/i,     // 压缩文件格式
            filename: '[path].gz[query]',   // 压缩后的文件名
            threshold: 10240,               // 压缩超过10k的文件
            deleteOriginalAssets: false,    // 不删除压缩前的文件,如果浏览器不支持gzip加载源文件
            algorithm: 'gzip',              // 使用gzip压缩
            minRatio: 0.8                   // 压缩率小于1才会压缩
          })
        ]
    }
}

四、ElementUI相关

    1:键盘事件

// 1:el-input 键盘事件
<el-input @keyup.enter.native="function"></el-input>
// 2:页面键盘事件
created: function() {
    document.addEventListener('keydown',this.handleEvent)
},
methods: {
	handleEvent(e){
        var that = this;
        //alt+F  
        let key = window.event.keyCode;  
        if (70 == e.keyCode && e.altKey){
            // 如果是Alt+F 的操作的话,方法执行与此
        }
    },
},
beforeDestroy(){
   document.removeEventListener('keydown', this.handleEvent);
}
// 3:el-input获取焦点选中
<el-input @focus="function($event)"></el-input>
methods: {
	function(e){
        e.currentTarget.select();
    },
}

    2:el-table滚动条自动滚动

<el-table ref="tabData"></el-tabe>
<script>
export default {
  data() {
    return {
      scrollTimer: null
    };
  },
  mounted() {
    if (!!this.id) {
      this.autoRoll();
    }
  },
  destroyed() {
    clearInterval(this.scrollTimer);
  },
  methods: {
    autoRoll() {
      let status = true;
      // const divData = this.$refs.dataTab.$el;
      const divData = this.$refs.tabData.bodyWrapper;
      divData.addEventListener("mouseenter", (e) => {
        status = false;
      });
      divData.addEventListener("mouseleave", (e) => {
        status = true;
      });

      this.scrollTimer = setInterval(() => {
        if (status) {
          divData.scrollTop += 140;
          console.log(divData.clientHeight + divData.scrollTop, divData.scrollHeight);
          if (divData.scrollHeight - (divData.clientHeight + divData.scrollTop) <= 2) {
            divData.scrollTop = 0;
          }
        }
      }, 10000);
    }
  }
}
</script>

 

五、甘特图插件

    Gantt : Samples DHTMLX-GANTT

npm install dhtmlx-gantt
<div ref="gantt"></div>
import { gantt } from 'dhtmlx-gantt';
  mounted: function () {
    // 初始化甘特图配置基础配置省略
    // 缩放功能配置
    let zoomConfig = {
      min_column_width: 80,
      max_column_width: 160,
      levels: [
        {
          name: 'l1', scales: [
            {unit: "year", format: "%Y", step: 1},
            {unit: "month", format: "%M %Y", step: 1},
          ]
        },
        {
          name: 'l2', scales: [
            {unit: "month", format: "%M %Y", step: 1},
            {unit: "week", step: 1, format: weekScaleTemplate},
            {unit: "day", format: dayTemplate, step: 1, css: daysStyle}
          ]
        },
        {
          name: 'l3', scales: [
            {unit: "month", format: "%M %Y", step: 1},
            {unit: "day", format: dayTemplate, step: 1, css: daysStyle},
            {unit: "hour", format: hourRangeFormat(12), step: 12}
          ]
        },
        {
          name: 'l4', scales: [
            {unit: "week", step: 1, format: weekScaleTemplate},
            {unit: "day", format: dayTemplate, step: 1, css: daysStyle},
            {unit: "hour", format: hourRangeFormat(6), step: 6}
          ]
        },
        {
          name: 'l5', scales: [
            {unit: "week", step: 1, format: weekScaleTemplate},
            {unit: "day", format: dayTemplate, step: 1, css: daysStyle},
            {unit: "hour", format: "%H:%i", step: 1}
          ]
        }
      ],
      useKey: "ctrlKey",
      trigger: "wheel",
      element: function(){
        return gantt.$root.querySelector(".gantt_task");
      }
    }
    gantt.ext.zoom.init(zoomConfig);
    gantt.ext.zoom.setLevel("l4");
    gantt.plugins({
      marker: true
    });
    // 甘特图初始化和导入数据
    gantt.init(this.$refs.gantt);
    gantt.parse(this.xx);
  },
  destroyed() {
    // 防止关闭页面后tooltip没有清除
    gantt.ext.tooltips.tooltip.hide();
    gantt.clearAll();
  }

六、Highcharts使用问题

    Highcharts数据量超过1000不显示:配置series:{turboThreshold:0 // 性能阈值}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值