【问题标题】:Manually instantiating components in Vue在 Vue 中手动实例化组件
【发布时间】:2019-03-07 14:53:04
【问题描述】:

我开始将“一些”Vue 集成到我正在开发的网站中,在这种情况下,我有一个作为组件列出文件的对话框。通过点击文件旁边的“删除”图标,会弹出一个新对话框,用户可以在其中确认是否删除该文件。

我构建它的方式是我有一个根组件,它有一个子“dialogListFiles”(默认隐藏,当用户执行特定操作时可见),它本身以编程方式创建一个新实例“ dialogConfirmDeletion”,当用户想要删除文件时。

这个实例化是通过 dialogListFiles 中的方法完成的:

deleteFile: function(fileInfo) {
    var DialogDeleteClass = Vue.extend(clDialogDeleteFile);
    var delDialog = new DialogDeleteClass({
        propsData: { 'fileInfo': fileInfo}
    });
    delDialog.$mount('#mountingPoint');
    this.visible = false;
}

#mountingPoint 是 dialogListFiles 模板内的一个

弹出删除确认对话框可以正常工作。然而:

  • 我无法让 $emit 工作:如果我在 dialogConfirmDeletion 的方法中调用 $emit,我无法在任何地方捕获此事件李>
  • 我读过here 说“从使用的角度来看,不建议在另一个组件的 DOM 中手动挂载”,所以我想知道我所做的是否完全错误,如果是,正确的设计应该是什么?

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    我认为你应该只使用confirm(msg) 方法,就像这样:

    if(confirm('Are you sure you want to delete this item?')) { this.visible = false; } 
    

    如果用户接受,这将弹出一个返回 true 的弹出窗口,我认为这是您想要实现的目标。

    希望这会有所帮助!

    【讨论】:

    • 嗯 - 这就是我想要实现的精神,是的,但希望使用更精致的 UI,因此为此创建一个新的对话框组件
    • 好的。我误解了你的问题。那么,包含您尝试删除的文件作为输入的组件(删除确认对话框)还不够吗?或者可能是每个文件的隐藏组件,单击时会显示?
    • 组件确实足够了,但我的问题是关于我应该选择的设计。我想避免在单击时显示“隐藏”组件,尽管我会在需要时实例化它,然后将其销毁 - 但是 1. 到目前为止,我还没有设法处理从该组件发出的事件和 2.我已经阅读(原始帖子中的链接)这不是一个好习惯,所以我正在寻找解释为什么这是不好的,以及什么是好方法
    • 我理解并且我同意手动挂载到别人的组件DOM中并不理想,但我不是Vue的创造者,所以我不会写我的想法。很抱歉我帮不了你,我希望你能找到答案,如果有,请在此处发布!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2020-05-25
    • 2022-12-01
    • 1970-01-01
    • 2020-03-07
    • 2019-04-13
    相关资源
    最近更新 更多