解决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 相关文章推荐
关于event.cancelBubble和event.stopPropagation()的区别介绍
Dec 11 Javascript
纯js实现仿QQ邮箱弹出确认框
Apr 29 Javascript
Javascript中神奇的this
Jan 20 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
微信小程序 页面跳转如何实现传值
Apr 05 Javascript
详解vue-router2.0动态路由获取参数
Jun 14 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
从零开始学习搭建React脚手架项目
Aug 23 Javascript
微信小程序嵌入腾讯视频源过程详解
Aug 08 Javascript
详解Angular cli配置过程记录
Nov 07 Javascript
JavaScript监听键盘事件代码实现
Jun 03 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
一个程序下载的管理程序(三)
2006/10/09 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
js实现漫天星星效果
2017/01/19 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
vuex的数据渲染与修改浅析
2020/11/26 Vue.js
决策树的python实现方法
2014/11/18 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
环境科学专业个人求职信
2013/12/15 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
2014年班级工作总结
2014/11/14 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS