解决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下onpropertychange事件的绑定方法
Aug 01 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
Fixie.js 自动填充内容的插件
Jun 28 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
Jan 25 Javascript
JavaScript基础教程之alert弹出提示框实例
Oct 16 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
May 10 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
JavaScript在web自动化测试中的作用示例详解
Aug 25 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
Sep 06 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 时间日期操作实战
2011/08/26 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
jquery easyui使用心得
2014/07/07 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
详解vue中axios的封装
2018/07/18 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
python实现大学人员管理系统
2019/10/25 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
网络教育自我鉴定
2014/02/04 职场文书
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
小学信息技术教学反思
2016/02/16 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
python 中yaml文件用法大全
2021/07/04 Python
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL
ipad隐藏软件app图标方法
2022/04/19 数码科技
Go语言怎么使用变长参数函数
2022/07/15 Golang