1. 业务场景

在表单设计中,我们在表单设计中增加了一个列表组件,这个列表组件的点击按钮,比如添加数据,编辑数据等,是需要打开jpaas-vue 的表单方案实现数据添加,编辑的。在表单组件中如果直接写表单方案的数逻辑,这样代码就会重复。
通过事件通讯机制我们来实现数据解耦,办法就是在表单组件中抛出事件,在jpaas-vue 监听此事件,实现表单的添加和编辑。

2. 实现步骤

2.1 VUE BUS组件

这个组件在jpaas-common-lib 中定义。

function VueBus(Vue) {
    const bus = new Vue()

    Object.defineProperties(bus, {
        on: {
            get() {
                return this.$on.bind(this)
            }
        },
        once: {
            get() {
                return this.$once.bind(this)
            }
        },
        off: {
            get() {
                return this.$off.bind(this)
            }
        },
        emit: {
            get() {
                return this.$emit.bind(this)
            }
        }
    })
    Object.defineProperty(Vue, 'bus', {
        get() {
            return bus
        }
    })
    Object.defineProperty(Vue.prototype, '$bus', {
        get() {
            return bus
        }
    })
}
if (typeof window !== 'undefined' && window.Vue) {
    window.Vue.use(VueBus)
}
export default VueBus;

2.2 在表单组件中发布事件

onAdd(){
        var alias= this.formBoList.formAddAlias?this.formBoList.formAddAlias:this.formBoList.formAlias;
        var params={
          action:"add",
          formdata:this.formdata,
          alias:alias,
          name:this.formBoList.name,
          table:this.table
        }
        this.$bus.emit("listButtonEvent",params);
    },

在列表组件的按钮点击事件中,我们发布一个listButtonEvent ,并传出必要的参数。

2.3 在jpaas-vue 中监听事件

编写代码 ListController.js 。

export  default {
  data(){
    return {
      table:{}
    }
  },
  created(){
    this.$bus.on("listButtonEvent",(obj)=>{
      this.handButtonClick(obj);
    });
  },

在 created()事件中添加订阅发布的列表事件。

为了保证这个事件只被监听一次,我们将 ListController 混入了 App.vue

import ListController from "@/views/modules/form/core/formsolution/ListController";

export default {
  mixins: [ListController],
文档更新时间: 2022-03-27 19:48   作者:zyg