elementui使用MessageBox 弹框自定义内容$msgbox:实现一个textarea文本输入框

摘要:
1.首先,让我们看一下官方网站的示例:单击打开MessageBoxexportdefault{methods:{open(){consth=this.$createElement;this.$msgbox({title:'message',message:h('p

1、首先我们可以看下官网的例子:

<template>
  <el-button type="text" @click="open">点击打开 Message Box</el-button>
</template>

<script>
  export default {
    methods: {
      open() {
        const h = this.$createElement;
        this.$msgbox({
          title: '消息',
          message: h('p', null, [
            h('span', null, '内容可以是 '),
            h('i', { style: 'color: teal' }, 'VNode')
          ]),
          showCancelButton: true,
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          beforeClose: (action, instance, done) => {
            if (action === 'confirm') {
              instance.confirmButtonLoading = true;
              instance.confirmButtonText = '执行中...';
              setTimeout(() => {
                done();
                setTimeout(() => {
                  instance.confirmButtonLoading = false;
                }, 300);
              }, 3000);
            } else {
              done();
            }
          }
        }).then(action => {
          this.$message({
            type: 'info',
            message: 'action: ' + action
          });
        });
      }
    }
  }
</script>

看到的效果是:

elementui使用MessageBox 弹框自定义内容$msgbox:实现一个textarea文本输入框第1张

显示的内容是固定的,肯定不是我们想要的结果了,我们需要动态的表单数据;原理很简单,就是自己创建dom节点,一开始我想的是直接创建el-input标签,代码如下(只用改变message这块代码)

 message: h('div', null, [
                        h('el-input', {
                            attrs: {
                                type: 'textarea',
                                rows: 4
                            },
                            props: {
                                value: _this.commentContent,
                            }
                        })
                    ]),

效果是可以出来的,但是根本输入不了任何内容:

elementui使用MessageBox 弹框自定义内容$msgbox:实现一个textarea文本输入框第2张

 查了很多资料,但是未找到任何原因,F12查看渲染出来的组件也是正常的,这里如果有大佬知道原因的话麻烦请指点一下:

(初步猜测,el-input标签渲染之后是多个标签,未渲染之前设置value值,根本没有绑定上真正的textarea标签,可能直接绑定在外层的div上了)

elementui使用MessageBox 弹框自定义内容$msgbox:实现一个textarea文本输入框第3张

 2、后面我换了一种写法,就是根据textarea渲染之后的样子直接一点点画出来,直接看代码吧:

 message: h('div', {
                        attrs: {
                            class: 'el-textarea',
                        },
                    }, [
                        h('textarea', {
                            attrs: {
                                class: 'el-textarea__inner',
                                autocomplete: 'off',
                                rows: 4,
                            },
                            value: _this.commentContent,
                        })
                    ]),

然后可以看到效果Ok了

elementui使用MessageBox 弹框自定义内容$msgbox:实现一个textarea文本输入框第4张

还有一个问题就是,这样写的话,vue自动的双向绑定已经没有效果了,只能自己写一个事件监听,监听到数据变化自己手动绑定,上最终完整代码(监听input事件,手动同步input输入内容):

onComment: function () {
    var _this = this;
    const h = _this.$createElement;
    _this.$msgbox({
        title: '消息',
        message: h('div', {
            attrs: {
                class: 'el-textarea',
            },
        }, [
            h('textarea', {
                attrs: {
                    class: 'el-textarea__inner',
                    autocomplete: 'off',
                    rows: 4,
                    id:'commentContent'
                },
                value: _this.commentContent,
                on: { input: _this.onCommentInputChange }
            })
        ]),
        showCancelButton: true,
        confirmButtonText: '评论',
        cancelButtonText: '取消',
        beforeClose: (action, instance, done) => {
            if (action === 'confirm') {
                instance.confirmButtonLoading = true;
                instance.confirmButtonText = '评论中...';
                alert(_this.commentContent);
            } else {
                done();
            }
        }
    }).then(action => {
        _this.$message({
            type: 'info',
            message: 'action: ' + action
        });
    });
},
onCommentInputChange() {
    this.commentContent = document.getElementById("commentContent").value;
}

可自行测试;欢迎大佬拍砖~~~

免责声明:文章转载自《elementui使用MessageBox 弹框自定义内容$msgbox:实现一个textarea文本输入框》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信小程序 View:flex 布局ARCGIS10.5安装教程(附完整安装包和汉化包)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

md5sum 和 sha256sum用于 验证软件完整性

md5sum 和 sha256sum 都用来用来校验软件安装包的完整性,本次我们将讲解如何使用两个命令进行软件安装包的校验: sha 是什么? sha 为安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法...

基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址

转载请说明原出处,谢谢~~ 前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布。其实这个控件封装起来没什么难度,我只是按照原来作者的demo,把相应的消息封装成duilib对应的。 在此首先要感谢wke内核的作者BlzFans以及soui2界面库的作者flyhigh,...

GStreamer Plugin: Embedded video playback halted; module decodebin20 reported: Your GStreamer installation is missing a plug-in.

标题是在Linux下使用系统yum install 的opencv库来获取视频帧的时候抛出来的错误消息。opencv调用了Gstream的API来处理了视频。错误抛出的代码如下图: http://ubuntuforums.org/archive/index.php/t-1730395.html http://stackoverflow.com/quest...

snmptrap、snmpinform和snmptrapd的详细介绍及其用法

在snmpwalk介绍及其用法一文中,介绍过net-snmp的snmpwalk的用法,殊不知,net-snmp还有trap的命令程序,可以用来测试snmp的trap方法(包括inform方法)。这些命令程序是:snmptrap、snmpinform和snmptrapd。其中: snmptrap:可以模拟snmp agent发送一个trap到snmp管理端...

在Ubuntu 18.04系统上安装Pydio Cells详细图文教程

前言   基于云的协作工具Pydio cell提供了一系列灵活的特性,包括应用内消息传递、文件共享和版本控制。下面逐步介绍安装过程。 Pydio cell最初是一个简单的基于云的文件共享系统,但经过升级后现在提供了更大的灵活性,用户可以使用应用内消息传递、文件共享、版本控制、移动应用等等。创建顶级的个人文件夹来组织数据,同时创建协作单元,以便与其他用户共享...

信息摘要算法之五:HMAC算法分析与实现

MAC(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。 1、HMAC概述 HMAC算法首先它是基于信息摘要算法的。目前主要集合了MD和SHA两大系列消息摘要算法。其中MD系列的算法有HmacMD2、HmacMD4、...