解决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 相关文章推荐
Ext.MessageBox工具类简介
Dec 10 Javascript
JS小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
javascript事件模型实例分析
Jan 30 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jQuery.datatables.js插件用法及api实例详解
Oct 28 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
Promise.all中对于reject的处理方法
Aug 01 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
js实现表格数据搜索
Aug 09 Javascript
原生JavaScript实现弹幕组件的示例代码
Oct 12 Javascript
关于JavaScript轮播图的实现
Nov 20 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
基于node实现websocket协议
2016/04/25 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python中的getopt函数使用详解
2015/07/28 Python
python实现简单爬虫功能的示例
2016/10/24 Python
python计算日期之间的放假日期
2018/06/05 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
详解python-图像处理(映射变换)
2019/03/22 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
Python如何进行时间处理
2020/08/06 Python
Linux如何为某个操作添加别名
2015/02/05 面试题
辞职信范文大全
2015/03/02 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
妈妈别哭观后感
2015/06/08 职场文书
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android