解决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 相关文章推荐
JavaScript编写连连看小游戏
Jul 07 Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 Javascript
jquery-tips悬浮提示插件分享
Jul 31 Javascript
浅谈AngularJS中ng-class的使用方法
Nov 11 Javascript
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
深入浅析ES6 Class 中的 super 关键字
Oct 20 Javascript
原生js封装的ajax方法示例
Aug 02 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
Apr 22 Javascript
微信小程序封装自定义弹窗的实现代码
May 08 Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 Javascript
layui实现form表单同时提交数据和文件的代码
Oct 25 Javascript
js实现文章目录索引导航(table of content)
May 10 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和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
Python subprocess模块常见用法分析
2018/06/12 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
python多维数组分位数的求取方式
2020/03/03 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
办公室经理岗位职责
2014/01/01 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
法律进机关实施方案
2014/03/12 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
民生工作实施方案
2014/05/31 职场文书
社区活动策划方案
2014/08/21 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
人生遥控器观后感
2015/06/11 职场文书
合作协议书格式范本
2016/03/21 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers