java加油站Vue js 2.0专题小技巧

VueJs中的el-dialog的坑[1]

2019-03-12  本文已影响0人  无拘无束的思想家

需要实现的功能

假设有三个页面A,B和页面C,我们有这样一个需求,可以从页面A直接带参数传给页面C,还需满足一定条件,先从A传到B,然后再从B到C(这里的B和C都是对话框,并且弹出C时,需要将B给隐藏掉)
页面A的名字叫:con_apply_tz.vue
页面B的名字叫:con_apply_ywht.vue
页面C的名字叫:con_tree.vue

1.直接从页面A到页面C

就直接通过 Vue 的父子传参的方式,没有什么可以说的:
页面A:

<template>
  <div> 
    <csc-single-table 
  :pageDef="pageDef" 
  :entity="entity"
  @view="view"     
  @create="create" 
  @disab="disab" 
  @update="update"
@pageQuery="doPageQuery" 
@doEdit="doEdit"
@doDelete="doDelete"
  :disableQueryForm="disableQueryForm" 
  :disableRowButtons="disableRowButtons"  >

  </csc-single-table>


<!--直接引入页面C-->
  <conTree :paramsInfo="paramsInfo" v-if="paramsInfo.conTreeVisiable" ></conTree>

<!--引入页面B,其中页面B并不是一个对话框,这里需要注意的是openConTree这个回调函数调用的时机-->
  <el-dialog
      width="95%"
      height="90%"
      :visible.sync="paramsConApplyTz.isShowYWHT"
      append-to-body
      >
      <conApplyYwht :paramsConApplyTz="paramsConApplyTz" @openConTree="openConTree"
      v-if="paramsConApplyTz.isShowYWHT" >
      </conApplyYwht>
    </el-dialog>

 
  </div>
  
</template>

页面A 的js代码

<script>
  import CscSingleTable from '@/components/CscSingleTable/CscSingleTable'
  import conTree from '@/views/csm/con_info/con_tree'
  import conApplyYwht from  '@/views/crt/con_apply/con_apply_ywht'



  // 合同模块也是需要引入用户的,以后需要根据用户查询对应的合同(高级查询)

  export default {
    data() {
      return {
        paramsInfo:{//使用父子传参的方式传递参数,父组件向子组件传递多个参数
          conTreeVisiable:false
        },
        paramsConApplyTz:{
          isShowYWHT:false
        },
        //下面省略了一大部分的数据
        xxxxxxxxxxxxxx
      }
    },

    components: { 

    CscSingleTable,
    conTree,
    conApplyYwht

     }, // 这个没有问题

    methods: {

      doPageQuery(listQuery) {

        getApproveCons(listQuery).then(response => {
          this.entity = response.data
          this.$store.dispatch('setListLoading', false)

        }).catch((error) => {
          console.log(error)
        })
      },

      // 行事件
      doEdit(row) {
        console.log('row ....')

      },
      view(row) {
        console.log('view 合同...')

        if(0==row.length){
          alert("请选择一笔生效合同。")
          return false
        }
        this.paramsInfo={

         conTreeVisiable:true,
         contractId:row.contractId,
         contractType:'02',
         proFlag:'-1'
        }

      },


      create(row) { 
       console.log('create合同...'+JSON.stringify(row))
       if(0==row.length){
        alert("请选择一笔生效合同。")
        return false
       }

      this.paramsConApplyTz={
        isShowYWHT:true,
        partyId:this.partyId,   //注意,这个partyId是写死的
        type:'02'
      }
 
      },

      handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {

            done();
          })
          .catch(_ => {});
      },

      openConTree(param){
        console.log("[openConTree] invoke..."+JSON.stringify(param))
        this.paramsConApplyTz.isShowYWHT=false;
        this.paramsInfo=param;
      }
    },
    mounted() {             
      this.doPageQuery() // 这个方法是调用上面的方法从后台获取数据,会发送异步请求
  }

  }
</script>

页面C
定义一个 接受父页面传过来参数的属性对象 paramsInfo
这里需要注意的一点是必须要将props属性定义在components 之下

    props:{
      paramsInfo: {//接收父组件传递过来的参数 

      },
    },

然后在页面上面调用

    created() {

      console.log("this.paramsInfo is "+JSON.stringify(this.paramsInfo))
      this.dialogVisible = this.paramsInfo.conTreeVisiable
      console.log("this.dialogVisible----------->"+this.paramsInfo.conTreeVisiable)
      param=this.paramsInfo
      console.log(JSON.stringify(param))

      this.initData(param)
    },

其中需要说明的事情是,页面C本身就是一个el-dialog对象,并且通过dialogVisible来控制页面C这个dialog显示与否

<template>
  <!--pay_tree.jsp:分发加载菜单栏信息-->
  <div class="conTree">
    <el-button @click="open" type="primary">打开</el-button>
    <el-dialog
      :visible.sync="dialogVisible"
      width="100%"
      :fullscreen="fullScreen"
      :before-close="handleGoodsDetailInfoClose">

页面的一些信息。。。。。。。
    </el-dialog>
  </div>
</template>

2.从页面A到页面B

页面B的核心代码:

<template>
<!--isShowYWHT这个用于判断是否显示 业务合同明细页面-->
<div v-show=isShowYWHT>
    <csc-single-table 
  :pageDef="pageDef" 
  :entity="entity"  
  @create="create" 
@pageQuery="doPageQuery" 
@doDelete="doDelete"
  :disableQueryForm="disableQueryForm" 
  :disableRowButtons="disableRowButtons" 
  >

  </csc-single-table>


</div>

</template>

页面B的Js代码

    props: {

      paramsConApplyTz:{ //用于接受父组件页面A con_apply_tz.vue传来的参数
        //con_apply_tz传递过来的参数放在这里
      }
    },


    data() {
      return {
        paramsInfo:{//使用父子传参的方式传递参数,父组件向子组件传递多个参数
          
        },

        isShowYWHT:false,
        }
    },
    created(){
    
      let param =this.paramsConApplyTz
      this.isShowYWHT=this.paramsConApplyTz.isShowYWHT //通过这行代码可以控制页面B的显示与否
      console.log("页面跳转成功:"+JSON.stringify(param))
    },

3.再从页面B跳转到页面C

这里的步骤需要说明一下,是通过页面B,create()这个方法被调用完成之后,通过页面A上的回调函数openConTree(),这个函数做了两件事:
1.将页面B给关闭,通过将isShowYWHT 这个值设置为false可以做到。
2.将参数传给页面C,参数param中包含了页面C中是否控制显示的变量 conTreeVisiable,通过将这个变量设置为true,既能够实现页面跳转,同时也可以将 参数传递给子页面C

页面A上的回调函数:

      openConTree(param){
        console.log("[openConTree] invoke..."+JSON.stringify(param))
        this.paramsConApplyTz.isShowYWHT=false;
        this.paramsInfo=param;
      }

页面B的相关业务逻辑

      create(row) { 

       createConInfo(row).then(response1 => {
          let res = response1.data

          if(res.msg!=''&&res.msg!=null){
            alert(res.msg)
            return false
          }

          console.log("con_tree visiable "+JSON.stringify(this.paramsConApplyTz))
          this.paramsInfo={
            conTreeVisiable:true,
            contractId:res.conInfo.contractId,
            contractType:'02',
            amountDetailId:row.amountDetailId,
            proFlag:'1',
            processInstId:res.processInstId
          }

          console.log("con_tree visiable2 "+JSON.stringify(this.paramsInfo))
          console.log("创建完成,调用父页面中的回调函数openConTree....")
          this.$emit('openConTree',this.paramsInfo);
 
        }).catch((error) => {
    
          console.log(error)
        })



      },

原文:https://blog.csdn.net/u014028392/article/details/88424347

上一篇下一篇

猜你喜欢

热点阅读