vue自定义封装全局组件与使用

以前只知道第1种局部组件。每个页面都需要引入,注册,然后才能像2一样使用!

在这里插入图片描述
下面学习一下全局组件的封装方法:

1、注册全局组件

在项目文件src→util→component.js文件,注册全局组件。

import transitionPage from '@/components/transition/index' //滑入滑出组件
import viewTextarea from '@/components/viewTextarea/index' //模拟textarea 展示富文本信息
export default (Vue)=>{
  Vue.component("transitionPage", transitionPage)
  Vue.component("viewTextarea", viewTextarea)
}

2、封装组件

在项目文件src→components→transition→index.vue文件(后面两个名字自取),在这写要封装的内容。(样式和布局可以复制原有的源码)
在这里插入图片描述

<template>
  <div ref="transform">
    <!--1.关闭按钮-->
    <div v-if="visible" class="avue-mask" @click="close"></div>
    <!--2.弹窗内容-->
    <transition class="nametra" name="slide-fade" mode="out-in">
      <div :class="visible?'transitionOpen':'transitionClose'" class="avue-drawer__wrapper" style="background-color: white">
        <div class="avue-drawer__content">
          <!--2.1弹窗标题-->
          <div class="avue-drawer__header">
            <span class="avue-drawer__title">{
  {tableName}}</span>
          </div>
          <!--2.2弹窗数据表单,用子组件方式传入,可根据type类型显示对应表单,满足不同页面的表单需求-->
          <div class="avue-drawer__body" style="height: calc(100% - 140px);overflow-y: auto;">
            <div class="el-scrollbar__view">
              <!--2.2.1会员系统-客户建议-意见建议-回复记录-->
              <div v-if="type === 'messageData'">
                <message-data ref="messageData" :objectData="objectData" :arrayData="arrayData"></message-data>
              </div>
              <!--2.2.2消息管理-消息发送-->
              <div v-if="type === 'messageSend'">
                <send-message ref="sendMessage" :tableName="tableName" :dataFrom="editData"></send-message>
              </div>
              <!--2.2.3微信中心-微信管理-模版参数-编辑弹窗-->
              <div v-if="type === 'editTemplate'">
                <edit-template ref="editTemplate" :editTemplateId="editTemplateId" :editTemplateTitle="editTemplateTitle"></edit-template>
              </div>
            </div>
          </div>
          <!--2.3底部右下角按钮,可根据type类型显示对应按钮,满足不同页面的按钮需求-->
          <div class="avue-drawer__footer" style="position: relative">
            <span  v-if="type === 'messageSend'" style="margin-right: 10px" class="dialog-footer">
                <el-button type="success" size="small" @click="sendMessageSubmit('saveSend')">发送</el-button>
            </span>
            <span  v-if="type === 'messageSend'" style="margin-right: 10px" class="dialog-footer">
                <el-button type="primary" size="small" @click="sendMessageSubmit('save')">暂存</el-button>
            </span>
            <span  v-if="(type === 'financialPro' && tableName === '新增') || (type === 'healthyPro' && tableName === '新增')
                   || (type === 'healthInvest' && tableName === '新增') "style="margin-right: 10px" class="dialog-footer">
               <el-button type="primary" size="small" @click="keepClose('save')">保存</el-button>
            </span>
            <span v-if="type === 'nodeConfigEdit' || type === 'editTemplate' || (type === 'giftInfo' && tableName === '编辑')
                   || (type === 'reportTemplate' && confirmEnding(tableName,'编辑'))" style="margin-right: 10px" class="dialog-footer">
               <el-button type="primary" size="small" @click="editClose">修改</el-button>
             </span>
             <span class="dialog-footer">
               <el-button type="default" size="small" @click="close">关闭</el-button>
             </span>
          </div>
        </div>
      </div>
    </transition>
  </div>
</template>

<script>
  /*引入需要的子组件--表单内容*/
  import creatView from '@/views/hygl/syslcpz/creatView/index'
  import cbView from '@/views/hygl/syslcspdbsx/cbView/index'
  import presentPoints from '@/views/hygl/rfjfzs/presentPoints/index'
  import memberInfo from '@/views/hygl/hyjbxx/memberInfo/index'
  import financialInvest from '@/views/hygl/rfjrtzjy/financialInvest/index'
  import healthyPro from '@/views/hygl/rfjkcpxx/healthyPro/index'
  import giftInfo from '@/views/hygl/rflpzlxx/giftInfo/index'
  import messageData from '@/views/hygl/rfyjjy/components/messageData'
  import editTemplate from '@/views/mp/wxmsgtemplate/editPage/index'
    export default {
      //注册
      components: {
        messageData,
        editTemplate,
        sendMessage
      },
      //向子组件传入数据
      props: {
        //通过type来判断需要那个组件
        type:{
          type: String,
          default: '',
        },
        //弹窗的标题
        tableName:{
          type: String,
          default: ''
        },
        //传入的对象
        objectData:{
          type: Object,
          default: function () {
            return {}
          },
        },
        //传入的数组
        arrayData:{
          type:Array,
          default: function () {
            return []
          },
        },
        //传入的字符串
        editTemplateId:{
          type: String,
          default: '',
        },
        editTemplateTitle:{
          type: String,
          default: '',
        }
      },
      data() {
        return {
          visible: true
        }
      },
      created(){},
      mounted(){ },
      methods: {
       confirmEnding(str, target) {
        var start = str.length-target.length;
        var arr = str.substr(start,target.length);
        if(arr == target){
          return true;
        }
        return false;
        },
        //未编辑直接关闭窗口
        close(){
          this.visible = false
          setTimeout(() => {
            if (this.type === 'messageData'){
              this.$emit('messageDataClose')
            }else if (this.type === 'editTemplate'){
              this.$emit('editTemplateClose')
            }else if (this.type === 'messageSend'){
              this.$emit('messageSendDialongClose')
            }
          }, 300);
        },
        //消息发送 保存、保存并发送
        sendMessageSubmit(data){
          this.$refs.sendMessage.submitForm()
          if (this.$refs.sendMessage.dynamicValidate) {
            var row = this.$refs.sendMessage.editData
            var wzObject = this.$refs.sendMessage.wzObject
            var fileNameUrl = this.$refs.sendMessage.fileNameUrl
            var para = {}
            if(data === 'save'){
              para.type = 1
            }else if (data === 'saveSend'){
              para.type = 2
            }
            para.dsfs = false
            para.fsrid = row.fsrid
            wzObject['jsrid'] = JSON.stringify(row.jsrid)
            para.wz = JSON.stringify(wzObject)
            para.fsfs = row.fsfs
            para.jsrid = []
            for (var i = 0;i<row.jsrid.length;i++){
              let m = row.jsrid[i].length
              para.jsrid.push(row.jsrid[i][m-1])
            }
  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值