vue实现弹窗引用另一个页面窗口

 更新时间:2022年04月22日 10:16:58   作者:Moss Huang  
这篇文章主要介绍了vue实现弹窗引用另一个页面窗口,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

弹窗引用另一个页面窗口

需求:在一个主页面A.vue上点击按钮时弹出一个窗口,该窗口的定义在B.vue,比如修改,需要从A.vue传参到B.vue,修改完成后,刷新A.vue. 实现

页面定义,有2个文件,在index.vue上有个【修改】按钮,点击弹出testDialog.vue定义的窗口,如下

testDialog.vue

<template>
  <!-- 添加或修改业务对话框 -->
  <el-dialog :title="title" :visible.sync="open" width="500px" :close-on-click-modal="false" append-to-body>
    <el-form ref="bizform" :model="bizform" label-width="80px">
      <el-form-item label="业务名称" prop="bizName">
        <el-input v-model="bizform.bizName" placeholder="请输入业务名称"/>
      </el-form-item>
      <el-form-item label="业务编码" prop="bizCode">
        <el-input v-model="bizform.bizCode" placeholder="请输入编码名称"/>
      </el-form-item>
    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button type="primary" @click="submitForm">确 定</el-button>
      <el-button @click="cancel">取 消</el-button>
    </div>
  </el-dialog>
</template>
<script>
    import {getById, addBizDefine, updateBizDefine} from "@/api/funds/routecenter/bizdefine";
    export default {
        name: "testDialog",
        data() {
            return {
                // 弹出层标题
                title: "",
                // 是否显示弹出层
                open: false,
                // 表单参数
                bizform: {}
            };
        },
        methods: {
            // 窗口初始化方法,nextTick方法可以添加逻辑,如打开窗口时查询数据填充
            init(bizId) {
                this.open = true;
                this.$nextTick(() => {
                    getById(bizId).then(response => {
                        this.bizform = response.data;
                        this.open = true;
                        this.title = "修改业务";
                    });
                });
            },
            // 取消按钮
            cancel() {
                this.open = false;
                this.reset();
            },
            /** 提交按钮 */
            submitForm: function () {
                this.$refs["bizform"].validate(valid => {
                    if (valid) {
                        if (this.bizform.id != undefined) {
                            updateBizDefine(this.bizform).then(response => {
                                if (response.data) {
                                    this.msgSuccess("修改成功");
                                    this.open = false;
                                    // 调用主页面的getList方法刷新主页面
                                    this.$parent.getList();
                                } else {
                                    this.msgError(response.resultMsg);
                                }
                            });
                        } else {
                            addBizDefine(this.bizform).then(response => {
                                if (response.data) {
                                    this.msgSuccess("新增成功");
                                    this.open = false;
                                    // 调用主页面的getList方法刷新主页面
                                    this.$parent.getList();
                                } else {
                                    this.msgError(response.resultMsg);
                                }
                            });
                        }
                    }
                });
            }
        }
    };
</script>

index.vue中定义一个button,其它代码省略

<template>
    <!-- 打开测试窗口按钮 -->
    <el-button
           type="primary"
           icon="el-icon-plus"
           size="mini"
           @click="handleDialog"
    >测试弹窗
    </el-button>
    <!-- 使用组件-->
    <testDialog title="测试窗口" v-if="openDialog" ref="testDialog"/>
</template>
<script>
    // 引用组件
    import testDialog from "./testDialog";
    import {queryBizDefine} from "@/api/funds/routecenter/bizdefine";
    export default {
        // 注册组件
        components: {testDialog},
        data() {
            return {
                // 显示窗口
                openDialog: false
            };
        },
        methods: {
            /** 查询业务列表 */
            getList() {
                this.loading = true;
                queryBizDefine(this.queryParams).then(response => {
                    this.bizList = response.data.rows;
                    this.total = response.data.total;
                    this.loading = false;
                });
            },
            // 按钮方法
            handleDialog() {
                this.openDialog = true;
                this.$nextTick(() => {
                    this.$refs.testDialog.init(2);
                });
            }
        }
    };
</script>

测试效果,上图是把id为2传了进来,在另一个页面能查出来,并显示

修改后能刷新主页面

弹窗如何嵌入其它页面

直接上代码。

代码使用的是Element-ui。

A页面(父页面)

将B页面当作组件引入。

import taskLogList from '../dialogPage/index.vue'
export default {  
  components:{
      dialogPage
    },
...
}

将组件引入放到HTML代码中

 <dialogPage 
    v-if="formPageVisible" 
    ref="formPageRef" 
    :queryId="logDialog.queryId">
</dialogPage >

代码说明

  • queryId:自定义的传值参数。 目的是将值从父页面传递到子页面去。
  • formPageVisible:显示参数。

在调用当前弹窗的方法里面进行如下设置

methods:{
    ...
 
    /**
    * 弹窗方法
    */
    showLog(obj){
 
        //显示
        this.formPageVisible = true;
 
        //赋值
        this.queryId= obj.queryId;
 
        //调用子页面方法
        this.$nextTick(()=>{
            
          this.$refs.formPageRef.getlist();
        })
      }
}

基本上A页面已经可以退休了。

下面B页面开始上场。

B页面(子页面)

B页面主要的工作是两个。

1、获取A页面的传值

2、方法的实现。

1、获取A页面的传值

传值的话,在Vue中。一般在props中进行设置。

 export default {
    props: {
      queryId:{
        type: String,
        default: '',
      },
    },
 ...

在这个里面,queryId是前面传递过来的参数。

2、方法的实现

省略....

对了,记得把B页面设置为dialog。否则弹窗的效果可能不能实现哦。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue引用public文件夹中文件的多种方式

    vue引用public文件夹中文件的多种方式

    由于一些演示需要对一些简单页面进行配置,由于打包build后的vue项目基本已经看不出原样,因此需要创建一个文件,并在打包的时候不会进行编译,所以文件放在public,这篇文章主要给大家介绍了关于vue引用public文件夹中文件的多种方式,需要的朋友可以参考下
    2024-02-02
  • vue中el-table前端如何导出excel数据表格

    vue中el-table前端如何导出excel数据表格

    这篇文章主要介绍了vue中el-table前端如何导出excel数据表格,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • 使用vue-element-admin框架调用后端接口及跨域的问题

    使用vue-element-admin框架调用后端接口及跨域的问题

    这篇文章主要介绍了使用vue-element-admin框架调用后端接口及跨域的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • el-table多选toggleRowSelection不生效解决方案

    el-table多选toggleRowSelection不生效解决方案

    这篇文章主要给大家介绍了关于el-table多选toggleRowSelection不生效的解决方案,文中通过图文以及代码将解决办法介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • vue编写简单的购物车功能

    vue编写简单的购物车功能

    这篇文章主要为大家详细介绍了vue编写简单的购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • Vue事件修饰符使用详细介绍

    Vue事件修饰符使用详细介绍

    在Vue中,修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理
    2022-10-10
  • vue写h5页面的方法总结

    vue写h5页面的方法总结

    在本篇内容里小编给大家整理了关于vue写h5页面的方法以及注意点分析,有需要的朋友们跟着学习下吧。
    2019-02-02
  • vue中watch监听对象中某个属性的方法

    vue中watch监听对象中某个属性的方法

    watch 的用法有个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行,如果我们需要在最初绑定值得时候也执行函数,就需要用到 immediate 属性,这篇文章主要介绍了vue中watch监听对象中某个属性的方法,需要的朋友可以参考下
    2023-04-04
  • vue中使用mixins/extends传入参数的方式

    vue中使用mixins/extends传入参数的方式

    这篇文章主要介绍了vue中使用mixins/extends传入参数的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Vue实现数据表格合并列rowspan效果

    Vue实现数据表格合并列rowspan效果

    这篇文章主要为大家详细介绍了Vue实现数据表格合并列rowspan效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07

最新评论