解决vue自定义全局消息框组件问题


Posted in Javascript onNovember 22, 2019

1.发现问题

在进行移动端适配的时候,为了在各个型号的设备上能够更好的提现结构排版,决定采用rem布局。采用rem布局的时候html的字体font-size是有一个标准的。我这边用的是750px的设计稿,就采用1rem = 100px。 

在使用的过程中会用到一些第三方UI组件,而第三方UI组件是以px单位为标准的。

使用时发现:本来应该细长的提示语句变得很大!

解决vue自定义全局消息框组件问题

最后发现可能是因为这个icon是继承了html设定的font-size,尝试加一些样式上去还是无效。(如果rem布局上有直接更改第三方组件样式成功的小伙伴欢迎告诉我哟!)

2.解决问题

有一种方法是可以可以用 px2rem-loader 插件可以将第三方ui库的px转换成rem单位,我们在写样式的时候用px,这个插件会帮我们转换为rem单位。(因为暂时只是一个提示框遇到这样的问题,不想大费周章,所以决定暂时不用,以后再用吧嘿嘿!)

自己写小组件,在网上冲浪了一会,选了几个小demo实现可以了下,确实比较好!(采用这个方法!)

3.自定义全局消息组件

大概效果有点模仿 element-ui 中的提示样式,反正最后效果图如下:

解决vue自定义全局消息框组件问题

解决vue自定义全局消息框组件问题

解决vue自定义全局消息框组件问题

解决vue自定义全局消息框组件问题

vue-cli3中component下新建message文件夹,里面再建如下:

解决vue自定义全局消息框组件问题

Message.vue源代码如下:

<template>
 <transition name="fade"> <!--这个是动画的过渡效果-->
 <div class="message" :class="type" v-if="visible">
  <div class="content">
  <i class="icon-type iconfont" :class="'icon-'+type"></i>
  {{content}}
  <i v-if="hasClose" class="btn-close iconfont icon-close" @click="visible=false"></i>
  </div>
 </div>
 </transition>
</template>
 
<script>
export default {
 name: 'Message.vue',
 data () {
 return {
  content: '',
  time: 3000,
  visible: false,
  type: 'info', // 'info','warning','error','success'
  hasClose: false 
 }
 },
 mounted () {
 this.close()
 },
 methods: {
 close () {
  window.setTimeout(() => {
  this.visible = false
  }, this.time)
 }
 }
}
</script>
 
<style scoped lang="scss">
 /* 动画效果 淡入淡出 */
 .fade-enter-active, .fade-leave-active{
 transition: all 0.5s ease;
 }
 .fade-enter, .fade-leave-active{
 opacity: 0;
 }
 /* 不同的提示语的样式 */
 .info, .icon-info{
 background-color: #DDDDDD;/*#f0f9eb*/
 color: #909399;
 }
 .success, .icon-success{
 background-color:#f0f9eb;
 color: #67C23A;
 }
 .warning, .icon-warning{
 background-color: #fdf6ec;
 color: #e6a23c;
 }
 .error, .icon-error{
 background-color: #fef0f0;
 color: #f56c6c;
 }
 .message {
 position: fixed;
 left: 50%;
 top: 10%;
 transform: translate(-50%, -50%);
 width:300px;
 height:30px;
 line-height: 30px;
 font-size: 16px;
 padding: 10px;
 border-radius: 5px;
 .content{
  width:100%;
  height:100%;
  text-align:left;
  .icon-type{
  margin:0 10px 0 30px;
  }
  .btn-close{
  font-size:20px;
  margin:0 0 0 70px;
  color:#ccc;
  }
 }
 }
 
</style>

index.js源代码如下:

给Vue添加$my_message方法,判断参数,使用 $mount() 给组件手动挂载参数,然后将组件插入页面中

import Vue from 'vue'
import Message from './Message.vue'
 
const MessageBox = Vue.extend(Message)
 
Message.install = function (options, type) {
 if (options === undefined || options === null) {
 options = {
  content: ''
 }
 } else if (typeof options === 'string' || typeof options === 'number') {
 options = {
  content: options
 }
 if (type !== undefined && options !== null) {
  options.type = type
 }
 }
 
 let instance = new MessageBox({
 data: options
 }).$mount()
 
 document.body.appendChild(instance.$el)
 
 Vue.nextTick(() => {
 instance.visible = true
 })
}
 
export default Message

main.js中:

// 在main.js里面全局引入 自定义的全局消息框组件
import Message from './components/message'
Vue.prototype.$my_message = Message.install

解决vue自定义全局消息框组件问题

页面中调用:

this.$my_message('你这个大笨猪吼吼吼!');
this.$my_message('你这个大笨猪吼吼吼!','success');
this.$my_message({
 content:'服务器连接失败!', // 弹出的文字内容
 time:5000,     // 弹出后多久消失
 type:'success',   // 弹出的消息类型
 hasClose:true,   // 让按钮可以被使用,默认按钮是false不可以使用的
 
});

4.注意事项

本Demo中弹出的提示语句中的小图标是iconfont里面的。

总结

以上所述是小编给大家介绍的解决vue自定义全局消息框组件问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
拖动一个HTML元素
Dec 22 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
jQuery进行组件开发完整实例
Dec 15 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
js将滚动条滚动到指定位置的简单实现方法
Jun 25 Javascript
jQuery实现获取隐藏div高度的方法示例
Feb 09 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
微信小程序显示下拉列表功能【附源码下载】
Dec 12 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
RequireJS用法简单示例
Aug 20 Javascript
实用的Vue开发技巧
May 30 Javascript
JavaScript实现省市联动效果
Nov 22 #Javascript
Vue混入mixins滚动触底的方法
Nov 22 #Javascript
超简单的微信小程序轮播图
Nov 22 #Javascript
微信小程序实现Swiper轮播图效果
Nov 22 #Javascript
Js代码中的span拼接问题解决
Nov 22 #Javascript
微信小程序商品详情页底部弹出框
Nov 22 #Javascript
小程序实现图片预览裁剪插件
Nov 22 #Javascript
You might like
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
Python进行数据科学工作的简单入门教程
2015/04/01 Python
python自动zip压缩目录的方法
2015/06/28 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python学生信息管理系统
2018/03/13 Python
PyQT实现多窗口切换
2018/04/20 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
对python中各个response的使用说明
2020/03/28 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
高中三年学习生活的自我评价
2013/10/10 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
小组合作学习反思
2014/02/18 职场文书
环保建议书作文
2014/03/12 职场文书
机械专业求职信
2014/05/25 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
python实现简单的名片管理系统
2021/04/26 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技