vue判断当前是否处在dialog对话框中

业务逻辑在使用封装的表格时,会触发自己写的一个进度条方法,但是现在在diaolog对话框里的组件不使用这个方法。

使用vue里的this.$el获取当前的标签元素,再使用原生获取父元素的方法parentNode来判断父元素是否存在class为dialog的标签,有的话返回true,没有返回false

//进度条方法
 async scroll() {
            // 判断是否是存在dialog中
            await this.isDialog(this.$el);
            if (this.isdialog) {
                return;
            }
        }

设置全局字段用来存放false或者true

 data() {
return {
    isdialog: false,
  }
}

递归判断是否存在名称为el-dialog的标签


isDialog(data) {
            if (data.parentNode) {
                if (data.getAttribute('class') == 'el-dialog') {
                    this.isdialog = true;
                    return;
                }
                this.isDialog(data.parentNode);
            } else {
                this.isdialog = false;
                return;
            }
        },

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的 Vue Dialog 组件示例代码: ```vue <template> <div v-show="visible" class="dialog-wrapper"> <div class="dialog"> <div class="dialog-header"> <h3>{{ title }}</h3> <button class="close-btn" @click="closeDialog">X</button> </div> <div class="dialog-body"> <slot></slot> </div> <div class="dialog-footer"> <button class="btn-primary" @click="confirm">确认</button> <button class="btn-secondary" @click="closeDialog">取消</button> </div> </div> </div> </template> <script> export default { props: { visible: { type: Boolean, default: false, }, title: { type: String, default: '提示', }, }, methods: { confirm() { // 触发确认事件 this.$emit('confirm') }, closeDialog() { // 触发关闭事件 this.$emit('close') }, }, } </script> <style> .dialog-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; } .dialog { width: 400px; background: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); } .dialog-header { padding: 10px; background: #f5f5f5; border-top-left-radius: 5px; border-top-right-radius: 5px; display: flex; justify-content: space-between; align-items: center; } .dialog-body { padding: 20px; } .dialog-footer { padding: 10px; background: #f5f5f5; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; display: flex; justify-content: flex-end; } .btn-primary { margin-right: 10px; padding: 5px 10px; background: #409eff; border: none; color: #fff; border-radius: 5px; cursor: pointer; } .btn-secondary { padding: 5px 10px; background: #fff; border: 1px solid #bbb; color: #333; border-radius: 5px; cursor: pointer; } </style> ``` 在上面的代码,我们定义了一个名为 `Dialog` 的 Vue 组件,它有一个 `visible` 属性来控制对话框的显示与隐藏,还有一个 `title` 属性来设置对话框的标题。 对话框内部包含三个部分:头部、内容和底部按钮。头部包含一个标题和一个关闭按钮,内容部分使用了 Vue 的插槽来允许我们自定义对话框的内容,底部包含了两个按钮:确认和取消。 在组件内部,我们定义了 `confirm` 和 `closeDialog` 两个方法来分别触发确认和关闭事件(使用了 `$emit` 方法)。在外部使用该组件时,我们可以监听这两个事件来获取用户的操作结果。 最后,我们还为组件添加了一些简单的样式。这只是一个简单的示例代码,你可以根据自己的需求进行修改和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值