IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> antd design pro of vue a-drawer自定义封装 -> 正文阅读

[JavaScript知识库]antd design pro of vue a-drawer自定义封装

antd design pro of vue a-drawer自定义封装

因为最近项目中频繁使用到抽屉组件,所有封装一个自定义的抽屉,在项目中可以少些很多重复代码的同时,改动时也能更加方便。这里记录一下。

这里使用antd design vue版的ui组件库,包含a-drawer、slot、$emit等

  1. 新建抽屉组件文件DrawerAssembly.vue
  2. 代码
<template>
  <div class="drawerAssembly">
    <a-drawer
      :visible="visible"
      :title="title"
      :width="width"
      :placement="placement"
      :headerStyle="{background:'#dce9ff', position:'absolute',width:'100%',height:'52px',zIndex:30}"
      :footer="null"
      :footer-style="{ display:'flex' }"
      :bodyStyle="{ padding: '0px', background: '#fff' }"
      @close="onClose"
    >
      <div class="content" style="margin-top:52px;width:100%;margin-bottom: 60px;">
        <slot name="content"></slot>
      </div>
      <slot name="footer">
        <div class="footer" :style="{ 'display': footerFlag?'':'none' }">
          <sheet-button type="cancel" title="取消" :style="{ marginRight: '8px' }" @click="onClose"> </sheet-button>
          <sheet-button type="create" title="保存" :style="{ marginRight: '10px' }" @click="handleOk()"> </sheet-button>
        </div>
      </slot>
    </a-drawer>
  </div>
</template>
<script>
import { SheetButton } from '@/components'
export default {
  name: 'DrawerAssembly',
  components: {
    SheetButton
  },
  props: {
    type: {
      type: String,
      default: 'success'
    },
    placement: {
      type: String,
      default: 'right'
    },
    width: {
      type: String,
      default: '800px'
    },
    title: {
      type: String,
      default: '这是标题'
    }
  },
  data () {
    return {
        visible: false,
        footerFlag: true
    }
  },
  mounted () {},
  created () {},
  methods: {
      // 编辑方法--- 带页脚
      edit () {
          this.visible = true
          this.footerFlag = true
      },
      // 查看方法--不带页脚
      see () {
          this.visible = true
          this.footerFlag = false
      },
      onClose () {
          this.visible = false
      },
      // 点击提交按钮---子组件向父组件传递函数
      handleOk () {
          this.$emit('submit')
      }
  }
}
</script>

<style scoped lang="less">
.DrawerAssembly{
    position: relative;
    width: 100%;
    height: 100%;
}
.content{
    width: 100%;
    height: 100%;
}
.footer {
    background: #666;
    width: 100%;
    height: 60px;
    background: #ffffff;
    display: flex;
    align-items: center;
    padding: 10px;
    border-top: 1px solid #e4ebf0;
    justify-content: flex-end;
    position: absolute;
    bottom: 0px;
    left: 0;
    z-index: 30;
}
</style>

  1. 使用
 <drawer-assembly
        :width="'380px'"
        :title="'系统设置'"
        ref="drawerAssembly"
        @submit="onCreatePostFinished"
      >
        <template v-slot:content>
          <div></div>
        </template>
      </drawer-assembly>
import DrawerAssembly from '@/components/DrawerAssembly/DrawerAssembly'
components: {
    DrawerAssembly
  },
  // 子组件回传的事件
    onCreatePostFinished () { 
		console.log('抽屉提交按钮回传函数,可以再次完成逻辑')
},

这里使用具名插槽的方法可以自定义中间内容部分,页脚可以选择默认样式也可以使用自定义的样式,抽屉组件中的edit和see方法可控制是否显示默认页脚,父组件中是一个ref的方式调用子组件,子组件提交按钮通过emit方法回传点击事件函数给父组件,父组件监听回传函数完成逻辑交互,这里的父子传值通过props,当然也可以使用slot的方式

slot插槽传值 这里放一个网上的例子

slot插槽传值

//子组件 : (假设名为:ebutton)
<template>
  <div class= 'button'>
      <button>  </button>
      <slot name= 'one' :value1='child1'> 这就是默认值1</slot>    //绑定child1的数据
      <slot :value2='child2'> 这就是默认值2 </slot>  //绑定child2的数据,这里我没有命名slot
  </div>           
</template>

new Vue({
  el:'.button',
  data:{
    child1:'数据1',
    child2:'数据2'
  }
})

//父组件:(引用子组件 ebutton)
<template>
  <div class= 'app'>
     <ebutton> 
        <template v-slot:one = 'slotone'>  
           {{ slotone.value1 }}    // 通过v-slot的语法 将子组件的value1值赋值给slotone 
        </template>
        <template v-slot:default = 'slottwo'> 
           {{ slottwo.value2 }}  // 同上,由于子组件没有给slot命名,默认值就为default
        </template>
     </ebutton>
  </div>
</template>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:02:02  更:2022-04-29 12:03:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:07:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码