• vue用render函数实现一个iview自定义内容的modal


    iview的Modal组件为我们提供了自定义内容的api,是基于Vue的render函数实现,那么我们就用render函数来实现一个如下图的自定义Modal

     想要用render函数实现之前首先要对render函数有所了解,先来认识一下render函数。

    1.render函数是做什么的?

    render函数和template一样,是用来创建html模板的, 一些特殊场景用template创建模板代码会冗长,此时用render函数写就会简单很多。

    例:Vue官网案例:https://cn.vuejs.org/v2/guide/render-function.html

    2.render函数具体怎么用?

    • 返回值: render函数返回值是一个虚拟节点Vnode,也就是我们要渲染的节点
    • 参数:render函数的参数是createElement,createElement本身也是一个函数,其参数有三个(官方推荐createElement可以简写成 h 代替)
    1. 第一个参数:要创建的节点: (必填) { string | object | function },可以是要创建的HTML标签名称,也可以是组件对象,也可以是解析上述任何一种的一个异步函数
    2. 第二个参数:标签中的属性: (可选) { object }
    3. 第三个参数:子虚拟节点: (可选) { string | array } 由createElement()构建而成,可以使用字符串来生成“文本虚拟节点

    <template>
      <p>
        <Button @click="handleRender">Custom content</Button>
      </p>
    </template>
    <script>
    export default {
      data () {
        return {}
      },
      methods: {
        handleRender () {
          this.$Modal.confirm({
            render: (h) => {
              return h('div', [ // 第一个参数'div'表示创建父节点div,如果要为该节点设置样式,则第二个参数应为一个object,这里不设置样式所以省略了,第三个参数[]表示创建div下的子节点
                h('div', { // 创建子节点div,设置样式,创建其子节点Icon和span
                  class: { 'modal-title': true },
                  style: {
                    display: 'flex',
                    height: '42px',
                    alignItems: 'center'
                  }
                }, [
                 h('Icon', {
                    props: {
                      type: 'ios-alert'
                    },
                    style: {
                       '28px',
                      height: '28px',
                      fontSize: '28px',
                      color: '#f90'
                    }
                 }),
                 h('span', {
                    style: {
                      marginLeft: '12px',
                      fontSize: '16px',
                      color: '#17233d',
                      fontWeight: 500
                    },
                    domProps: { innerHTML: '提示' }
                 })

                ]),
                h('div', { // 创建内容区div节点,设置样式
                  class: { 'modal-content': true },
                  style: { paddingLeft: '40px' }
                }, [
                  h('p', { // 创建content的子节点 p标签、label标签、RadioGroup
                    style: { marginBottom: '15px' },
                    domProps: { innerHTML: `这是一条内容` }
                  }),
                  h('label', {
                    style: { marginRight: '10px' },
                    domProps: { innerHTML: '解绑任务' }
                  }),
                  h('RadioGroup', {
                    props: { value: '是' }, // 设置RadioGroup初始值
                    on: {
                      input: (val) => {
                        console.log(val)
                      }
                    }
                  }, [
                   h('Radio', { // 创建两个radio
                      props: { label: '是' }
                   }),
                   h('Radio', {
                      props: { label: '否' }
                   })
                  ])
                ])
              ])
            },
            onOk: () => {// do sth}
          })
        }
      }
    }
    </script>

    // 至此,一个自定义modal已经实现了,预览效果:https://run.iviewui.com/preview/gEC2IMAU

    整体dom结构如下

  • 相关阅读:
    测试rar/bz2/tar.gz/gz压缩文档完整性
    php中ajax调用出错的问题
    WIN32_LEAN_AND_MEAN宏
    Windows XP SP3下编译安装check-0.10.0
    Windows XP SP3下成功编译CUint2.1-3
    WebService客户端调用的几种方式
    Webservice 返回数据集 DataSet 及Android显示数据集LiveBindings
    REST 服务器调试 RESTDebugger.exe 和浏览器测试 webservice 调试工具
    delphi android路径 TPath 文件路径,文件管理 file path
    RESTClient 控件 从服务器获得数据集 REST
  • 原文地址:https://www.cnblogs.com/AIonTheRoad/p/13252399.html
Copyright © 2020-2023  润新知