- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
谁能提供一个示例,说明如何将组件动态加载到 Material MatDialog 中?
我想做的是:我将为 MatDialog 配置数据提供一个组件类型,然后对话框将创建一个实例并将其放置在它的 mat-dialog-content 区域中。
看来我需要使用 ng-template 和 viewContainerRef 的某种组合,但我不知道如何实例化提供的组件类型并插入到所需区域。
一个简单的例子:
<h2 mat-dialog-title>MyTitle</h2>
<mat-dialog-content>
<---- dynamically loaded component would be inserted here ---->
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>Cancel</button>
<button mat-button [mat-dialog-close]="true">Save</button>
</mat-dialog-actions>
最佳答案
有不同的选择:
1) 内置结构指令ngComponentOutlet
<ng-container *ngComponentOutlet="data.component"></ng-container>
2) 使用 Angular Material cdk。更准确地说,您可以从辅助入口点 @angular/cdk/portal
PortalModule
dialog.component.ts
import { ComponentPortal } from '@angular/cdk/portal';
@Component({...})
export class DialogDialog {
portal: ComponentPortal<any>;
constructor(...
@Inject(MAT_DIALOG_DATA) public data: any) { }
ngOnInit() {
this.portal = new ComponentPortal(this.data.component);
}
dialog.component.html
<ng-template [cdkPortalOutlet]="portal"></ng-template>
3) 使用 Angular 低级 API
dialog.component.ts
@Component({...})
export class DialogDialog {
@ViewChild('target', { read: ViewContainerRef }) vcRef: ViewContainerRef;
componentRef: ComponentRef<any>;
constructor(
...
private resolver: ComponentFactoryResolver,
@Inject(MAT_DIALOG_DATA) public data: any) { }
ngOnInit() {
const factory = this.resolver.resolveComponentFactory(this.data.component);
this.componentRef = this.vcRef.createComponent(factory);
}
ngOnDestroy() {
if (this.componentRef) {
this.componentRef.destroy();
}
}
}
dialog.component.html
<ng-template #target></ng-template>
关于angular - 在 Material MatDialog 中动态加载组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48723439/
我正在对我的应用程序进行单元测试。我是测试新手,因此需要您的帮助。 在我的应用程序中,我创建了一个使用 MatDialog (KDSDialogService) 的服务。我尝试过将许多导入替代方案、我
我正在对我的应用程序进行单元测试。我是测试新手,因此需要您的帮助。 在我的应用程序中,我创建了一个使用 MatDialog (KDSDialogService) 的服务。我尝试过将许多导入替代方案、我
现在可以在两个组件之间进行通信。但不知道如何通过事件发射器将用户(选定)输入的值作为对象从 MatDialog 组件传递到父组件。在这里,我想在单击提交按钮后将选定的选项值和文本区域值作为对象传递。
我是编码新手,也是 Angular 新手,所以我想我会寻求一些帮助。这是我的第一个问题,请耐心等待。 我想为 Angular Material Dialog Service 创建一个包装服务(我只是想
我想向我的应用程序添加一个对话框,但由于某种原因它没有显示。 对话框组件: import { Component, OnInit } from '@angular/core'; import {Mat
它不是作为停留弹出窗口打开,而是作为页面底部左对齐的 block 打开。 我搜索了类似的问题,找到了这个angular2 MdDialog is not appearing as a popup但也不
我正在尝试使用 MatDialog 并基于 this example我已经按如下方式实现了该对话框: import {Component, Inject, OnInit} from '@angular
我正在关注 here 中的文档.我可以将数据传递给对话框,但我没有从中获取数据。我在 .afterClose().subscribe() 上得到了未定义的结果。我错过了什么?我猜我需要在对话框的模板中
我目前正在做一个 Angular 项目。我使用 MatDialog来自 Angular Material 和 drag and drop 的 Angular 模块.我想防止对话框被拖到屏幕窗口之外。有
打开 MatSelect 时在常规页面中,可以通过 MAT_SELECT_SCROLL_STRATEGY 自定义滚动行为注入(inject) token 并使用 NoopScrollStrategy为
如果他空闲 20 分钟,我想提醒用户。所以,创建了一个服务。 它在桌面上运行良好,但在手机中它没有显示,有时如果屏幕在后台停留了几个小时,那么一旦我再次进入页面,注销对话框屏幕就会开始倒计时。 我的意
假设您有 Angular 服务,但没有 ProvideIn,因此它仅在某些组件及其子组件中可用。现在,这样一个组件打开了 MatDialog——是否可以在那里注入(inject)该服务? 正如我所见,
如何将数据发送到作为 ng-template 的 MatDialog? 模板 Open {{data?}} 组件 export class SomeComponent { @Vi
我目前正在使用一个组件,在该组件中单击按钮将打开一个弹出窗口来问候用户。我正在使用 Angular Material Dialog 打开弹出窗口,点击时将调用的组件代码块是 public openMa
完全改写的问题 : 我试图简化问题,因为我理解我最初写下它的方式非常复杂;以下是问题的更简单表示,尽管问题的表示略有不同。 我需要一种方法在顶级组件(即“app”组件)中创建服务的两个实例,并将每个实
是否可以将自定义 CSS 摇动动画添加到 Material MatDialog(例如,如果您在 Form-Dialog 中输入了错误的信息)? 由于对话框是通过 MatDialog 服务实例化的,我不
我已经使用 angular MatDialog 实现了一个模态对话框来代替 alert() 函数。一切正常,但对话框的定位。我无法设法将对话框放在页面的中央。该对话框始终出现在页面的左下角。 html
我已经阅读了几个答案,并且尝试了很多,但我似乎无法让它发挥作用。在我的 Angular 6 应用程序中,我尝试打开一个 MatDialog 但我收到此错误: ERROR Error: Expressi
我试图为重新定位策略中的对话框制作滚动条,但它对我不起作用。 const scrollStrategy = this.overlay.scrollStrategies.reposition(); co
谁能提供一个示例,说明如何将组件动态加载到 Material MatDialog 中? 我想做的是:我将为 MatDialog 配置数据提供一个组件类型,然后对话框将创建一个实例并将其放置在它的 ma
我是一名优秀的程序员,十分优秀!