VUE实用的例子

表格中默认数据需要计算的时候先计算好再调用

//vue
<e-table
    :other-height="ComponentStateTable.otherHeight"
  />
//js
data() {
    // 计算高度值  
    const calculatedHeight = `${(window.innerHeight - 420) / 2}`;
    return {
      ComponentStateTable: {
        // 调用算好的高度
        otherHeight: calculatedHeight,
}

使用浏览器缓存来切换不同变量

场景:做了两个主题来切换使用,又不想保存在数据库,那就用浏览器缓存来保存状态。


image.png

网页的设置文件main.js

//-----设置主题
// 从 localStorage 获取 styleName 的值并设置为全局变量 window.styleName 的值
// 检查localStorage中是否存在styleName  
const storedStyleName = localStorage.getItem('styleName');  
// 如果不存在,则设置默认值theme1到window对象和localStorage中  
if (!storedStyleName) {  
  window.styleName = 'theme1';  
  localStorage.setItem('styleName', 'theme1');  
} else {  
  // 如果存在,则直接从localStorage中获取值赋给window对象  
  window.styleName = storedStyleName;  
}

//这里是判断不同的主题变量使用不同的样式
if (window.styleName === 'theme1') {
  import('@/themes/theme1/theme/index.css') 
  import('@/themes/theme1/mystyle.scss') 
  import('@/themes/theme1/variables.scss') 
  // alert(styleName)
} else if (window.styleName === 'theme2') {
  import('@/themes/theme2/theme/index.css') 
  import('@/themes/theme2/mystyle.scss') 
  import('@/themes/theme2/variables.scss') 
  // alert(styleName)
}

主题页面.vue

<template>
  <div >
    <ul class="themeList">  
      <li v-for="(theme, index) in themes" :key="index" >  
        <div class="mystle">  
          <el-card class="box-card">  
            <div>  
              <p class="margin_b10 font_b">{{ theme.title }}</p>  
              <p><img :src="theme.image" style="width: 100%; height: auto;" /></p>  
              <p class="margin_t10 textcolor">{{ theme.industries }}</p>  
              <p class="margin_t10 textcolor">  
                <el-button  
                  v-if="currentStyleName === theme.name"  
                  type="success"  
                  @click="changeStyleName(theme.name)"  
                >  
                  <span>正在使用</span>  
                </el-button>  
                <el-button  
                  v-else  
                  type="primary"  
                  @click="changeStyleName(theme.name)"  
                >  
                  <span>立即使用</span>  
                </el-button>  
              </p>  
            </div>  
          </el-card>  
        </div>  
      </li>  
    </ul>  
  </div>

</template>
<script>
import Vue from 'vue';  

export default {
  data() {  
    return {  
      //获取主题初始值
      currentStyleName: localStorage.getItem('styleName'), // 初始值
      //主题样式
      themes: [  
      {  
        name: 'theme1',  
        title: '科技炫酷红',  
        image: require('@/img/img_style1.jpg'),  
        industries: '油田,媒体,政治,预警' 
      },  
      {  
        name: 'theme2',  
        title: '大气科技蓝',  
        image: require('@/img/img_style2.jpg'),  
        industries: '科技,电网,医疗,地铁'
      },  
      // ...  
    ],  
    }
  },
  mounted() {
    // 从 localStorage 获取 styleName 的值并设置为全局变量 window.styleName 的值
    window.styleName = localStorage.getItem('styleName') || 'theme1';
    
  },

  methods: {  
    changeStyleName(newStyle) {  
      // 更新window对象中的styleName属性  
      window.styleName = newStyle;  
      // 更新localStorage中的styleName值  
      localStorage.setItem('styleName', newStyle); 
      console.log('localStorage.styleName set to:', newStyle);  
      // 刷新页面  
      location.reload();
      // alert(window.styleName);
    }  
  
  }  
  
}
</script>

自定义tabs

// html
//控制显示的按钮 ,其中按钮的样式自已优化
<el-button :class="stationShow?'station_close':'station_open'"   @click="stationShow = true,stationShow2 = false"></el-button>
<el-button :class="stationShow2?'station_close':'station_open'"  @click="stationShow2 = true,stationShow = false"></el-button>
//显示隐藏的容器
 <div v-show="stationShow" ></div>
<div v-show="stationShow2" ></div>


// JS
data() {
      return {
        stationShow:true,//定义一个要显示的变量
    stationShow2:false,//定义第二个tab要显示的变量
}
}

1、svg缩放拖拽组件

vue-svg-pan-zoom 组件

安装组件:
方式1、执行 npm install --save vue-svg-pan-zoom
方式2、执行 cnpm install vue-svg-pan-zoom

//页面代码

<template>
<SvgPanZoom
      class=""
      style="width: 100%;height:calc(100vh - 460px);"
      :zoomEnabled="true"
      :controlIconsEnabled="false"
      :fit="false"
      :center="true"
      :customEventsHandler="eventsHandler"
    >
 <svg  style="width: 100%;height: 180px" viewBox="0 0 707.8 195.12"></svg>
</SvgPanZoom>
</template>

<script>
//引用组件
  import SvgPanZoom from 'vue-svg-pan-zoom'
  export default {
    components: { SvgPanZoom }//控件声明
  };
</script>

2、返回上一页写法

//html
<el-button type="primary" @click="goOff()"    >返回</el-button>

 //js 返回上一页
methods: {
    goOff(){

        if (window.history.length <= 1) {

            this.$router.push({path:'/'})

            return false

        } else {

            this.$router.go(-1)

        }

    },
}

3、在JS中写一个全局变量,其它界面调用

例如main.js中定义了一个styleName 的全局变量

window.styleName = 'theme2'//window为设置为全局变量

if (styleName === 'theme1') {
  import('@/themes/theme1/theme/index.css') 
  import('@/themes/theme1/mystyle.scss') 
  import('@/themes/theme1/variables.scss') 
  // alert(styleName)
} else if (styleName === 'theme2') {
  import('@/themes/theme2/theme/index.css') 
  import('@/themes/theme2/mystyle.scss') 
  import('@/themes/theme2/variables.scss') 
  // alert(styleName)
}

video.vue界面调用styleName变量

<template>
  <div class="">
    <video width="100%"   autoplay loop="loop" style="mix-blend-mode: lighten;">
      <source :src="`@/themes/${styleName}/img/map.mp4`"  type="video/mp4">
    </video>
  </div>
</template>
      
<script>

export default {  
  data() {  
    return {  
      styleName: ''  
    };  
  },  
  created() {  
    this.styleName = window.styleName;  
  }  
}
</script>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容