首页 > 其他分享 >2023.04.06 - 使用mixin动态混入,对vue组件中的数据做兼容经验总结(xp)

2023.04.06 - 使用mixin动态混入,对vue组件中的数据做兼容经验总结(xp)

时间:2023-04-06 14:34:01浏览次数:74  
标签:vue 06 代码 2023.04 mixin 组件 xp 方法

业务场景:在一个高拍仪的硬件设备中,厂家给了两套不同的API,分别支持win XP 和 winXP以上版本的系统,而这两套API的实现方式截然不同,一套使用的是http通信,一套是使用scoket通信,方法的调用自然也是不同。

我需要在同一组件兼容这两套代码。这种需求下很明显,我除了修改组件里的函数方法,其他的代码基本上都不应该去动它,封装好的两套方法,只要接出封装好的函数去调用就好了。

所以得出结论

  • 一个组件两套代码

  • 只用修改script的代码就可以实现功能,而template和style是不需要动的

这可以用到vue的mixin功能来做到动态渲染,核心代码如下

<template>
<el-button @click="goPhoto()">拍照</el-button>
</template>
<script>
import GLOBAL from '@/config/config';
import xp from '@/mixins/xp.js';
import  win7Above from '@/mixins/win7Above.js';
  // 判断当前系统是否为XP
const osisxp = navigator.userAgent.indexOf('Windows NT 5.1') > -1;
export default {
  // 动态判断使用的代码
  mixins: [osisxp ? xp : win7Above],
}
<script>

为mixin里写的就是整套当前vue组件的代码描述了。分别对应了两份兼容代码,描述里都写着goPhoto方法,并对应着各自的实现。


别的方法

我试过用<componet>动态组件来实现上面的效果类似于这样:<component v-bind:is="currentTabComponent"></component>,过程中我用了组件透传的方法,在去用判断是否为XP的函数做判断,来判断需要展示的组件。但这样做有几个不太合理的点:

  • 我不需要对模版和样式做出改动,而这个方法下我需要创建两个.vue文件作各自的维护。
  • 当使用到组件中ref引用时,我通过透传的方法,可能还需要枚举组件里使用的方法,进行嵌套,不能直接获取到目标容器的ref值

标签:vue,06,代码,2023.04,mixin,组件,xp,方法
From: https://www.cnblogs.com/yehuda/p/17292664.html

相关文章

  • 直播商城源码,vue 弹窗 惯性滚动 加速滚动
    直播商城源码,vue弹窗惯性滚动加速滚动弹窗基础组件新建文件components/zwy-popup <template><divv-show="ishide"@touchmove.stop.prevent><!--遮罩--><divclass="mask":style="maskStyle"></div><!--内容--><divcl......
  • Vue进阶(四十五):精解 ES6 Promise 用法
    一、前言复杂难懂概念先不讲,我们先简单粗暴地把Promise用一下,有个直观感受。那么第一个问题来了,Promise是什么呢?是类?对象?数组?函数?别猜了,console.dir(Promise)直接打印出来看看。这么一看就明白了,Promise是一个构造函数,自己身上有all、reject、resolve这几个眼熟的方法,原型上有th......
  • vue之列表渲染v-for
    目录简介用法v-for可循环的几种变量的展示数组的循环展示对象的循环展示字符串的循环展示数字的循环展示v-for搭档key值的说明js循环几种方式基于索引的循环数组的循环数组基于索引的循环数组基于迭代的循环基于of的循环数组的方法循环jQuery的循环点击按钮隐藏/显示列表示例简......
  • vue第六课:v-for,v-on补充,v-model
    1,v-for指令根据数据生成列表结构<divid='app'><inputtype="button"value="添加数据"@click="add"><inputtype="button"value="删除数据"@click="remove"><ul><......
  • vue第五课:图片切换实例
    知识点:1,定义图片数组2,添加图片索引3,绑定src属性4,图片切换逻辑需求:第一张图片不显示上一页(隐藏)最后一张图片不显示下一页(隐藏)<divid='app'><img:src="imgarr[index]"><ahref="#"v-show="index!=0"@click="prev"><imgs......
  • vue之条件渲染
    目录说明语法示例说明“vue条件渲染指令包括v-if、v-else、v-else-if、v-show。语法v-if="条件1&&条件2"#条件可以用变量+运算符号表示,&&表示andv-if-else="条件"v-else#因为是例外,所以不需要使用条件示例<body><divid="app"><h1&......
  • vue-生产环境强制开启dev-tool
    由于生产环境中无法启用dev-tool,而一些问题只在生产环境中体现,所以在生产环境中调试vue,我个人认为还是比较有用的,那么怎么在生产环境中启用dev-tools呢,便捷的方法只需要在chrome商店中下载vueforcedev就好啦cheers!!!!......
  • uni-app:ios/android中的nvue和vue页面加载自定义字体(hbuilderx 3.7.3)
    一,官方文档地址:https://uniapp.dcloud.net.cn/tutorial/nvue-api.html#addrule二,代码1,nvue页面:模板<viewclass="listTitle">{{item.title}}</view>......
  • 我的第一个项目(九) :飞机大战Vue版本塞到主页
    好家伙, 这是未进行分包的vue版本的飞机大战效果如下:  这里说明一下,大概使用逻辑是提供一个<div>然后在这<div>中渲染游戏 游戏主界面代码如下:1<template>2<div>3<h1>欢迎来到主页面</h1>4<divref="stage"></div>5</div......
  • vue excel导入,导出
    @GetMapping("/exportExample")@Inner(false)//publicRexportExample(Integercs,Stringcs2){publicvoidexportExample(MeterWatermeterWater,HttpServletResponseresponse)throwsIOException{//查询所有用户Map<String,......