解决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 相关文章推荐
jQuery 工具函数学习资料
Apr 29 Javascript
基于jquery的可多选的下拉列表框
Jul 20 Javascript
jQuery设置div一直在页面顶部显示的方法
Oct 24 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 Javascript
jQuery知识点整理
Jan 30 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
介绍JavaScript的一个微型模版
Jun 24 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
小程序ios音频播放没声音问题的解决
Jul 11 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
javascript sort()对数组中的元素进行排序详解
Oct 13 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
PHP使用Mysql事务实例解析
2014/09/08 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
Javascript 强制类型转换函数
2009/05/17 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
iframe实用操作锦集
2014/04/22 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
Position属性之relative用法
2015/12/14 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
Python3实现Web网页图片下载
2016/01/28 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
日语专业毕业生求职信
2013/12/04 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
2015中秋祝酒词
2015/08/12 职场文书