解决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.timer插件实现一个计时器
Apr 25 Javascript
心扬JS分页函数代码
Sep 10 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
Feb 27 Javascript
JS弹出窗口代码大全(详细整理)
Dec 21 Javascript
js弹出层永远居中实现思路及代码
Nov 29 Javascript
你有必要知道的25个JavaScript面试题
Dec 29 Javascript
javascript实现随机显示星星特效
Jan 28 Javascript
AngularJS入门教程之多视图切换用法示例
Nov 02 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
Jun 08 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 jQuery
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
Apr 28 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 Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
php筛选不存在的图片资源
2015/04/28 PHP
php通过各种函数判断0和空
2020/07/04 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
用Python实现一个简单的线程池
2015/04/07 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
python DataFrame 取差集实例
2019/01/30 Python
pandas分区间,算频率的实例
2019/07/04 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
深圳茁壮笔试题
2015/05/28 面试题
毕业生物理教师求职信
2013/10/17 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python