【问题标题】:Angular Communication Parent/Child in modals problem模态问题中的角通信父/子
【发布时间】:2020-03-04 20:24:24
【问题描述】:

我仍在学习组件之间如何通信,所以我有我的 parentView,里面有一个带有 vmware-clarity 组件的模态,但在我的工作中,他们告诉我将它移到一个单独的组件中。

父视图(之前)

<button class="btn btn-cris" (click)="confirm=true">Create Project</button>
<clr-modal [(clrModalOpen)]="confirm">
    ///modal Content
</clr-modal>

我将其更改为: 父视图:

<button class="btn btn-cris" (click)="confirm=true">Create Project</button>
<app-myModal [confirm]="confirm"></app-myModal>

modalView.html:

<clr-modal [(clrModalOpen)]="confirm">
    ///modal Content
</clr-modal>

modalView.ts:

export class QSubInitialProcessComponent implements OnInit {
    @Input('confirm') confirm: boolean;

    constructor() { }

    ngOnInit() {
    }

}

但是现在当我使用默认的“x”按钮关闭模式时,我无法重新打开它,当它只有一个组件时,你可以关闭它并打开它。

我猜这与父母和孩子的交流有关,但我不太确定。据我所知,清晰度组件默认附带的“x”按钮会自动更改值

【问题讨论】:

    标签: angular modal-dialog vmware-clarity


    【解决方案1】:

    您肯定在正确的轨道上。我相信您的问题出在此处:

    <app-myModal [confirm]="confirm"></app-myModal>
    

    这是从您的父级到您的新模态视图组件的单向绑定。当您的 clr-modal 将此标志更改为 false 以用于您的模态视图时,您的父母可能仍然认为它是 true

    您需要做的是向中间模态视图引入双向绑定。您可以通过对模态视图的简单添加来做到这一点:

    @Input('confirm') confirm: boolean;
    @Output() confirmChange = new EventEmitter<boolean>();
    

    然后,使用 banana-in-a-box 自动将您的双向绑定与您的父级关联:

    &lt;app-myModal [(confirm)]="confirm"&gt;&lt;/app-myModal&gt;

    banana-in-a-box 只是同时使用输入和输出的语法糖。 有关更多信息,请参阅官方指南: https://angular.io/guide/template-syntax#basics-of-two-way-binding

    如果以上方法不足以解决问题,也可能是您与clr-modal 的输出中的confirm 双向绑定。您可以尝试像这样解开关联:

    <clr-modal [clrModalOpen]="confirm" (clrModalOpenChange)="confirmChange.emit($event)">
        ///modal Content
    </clr-modal>
    

    我希望您的模态视图组件将真正充当实际模态打开状态的传递。

    【讨论】:

    • 我像你说的那样改变了它,添加了@Output() confirmChange = new EventEmitter&lt;boolean&gt;();和父视图&lt;app-myModal [(confirm)]="confirm"&gt;&lt;/app-myModal&gt;,但它仍然不起作用,我错过了什么吗?
    • 可能是因为&lt;clr-modal&gt; 组件?我没有在哪里改变确认的值,我只知道它做到了
    • @RicardoSanchezSantos 我已经更新了我的答案。请记住,banana-in-a-box 是双向绑定的,因此 clr-modal 正在更改 confirm 由于使用它。
    • 不相关,但您可能想确认您的团队希望您以这种方式将模态移动到它自己的组件,因为我认为移动模态 content 到一个新组件,导致&lt;clr-modal...&gt;&lt;app-myModal&gt;&lt;/app-myModal&gt;&lt;/clr-modal&gt;
    • 老实说,这是我的第一个方法,并且模式有效,我可以打开和关闭任意次数,但内容没有显示
    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2018-08-12
    • 2020-01-20
    • 2018-02-10
    相关资源
    最近更新 更多