pur*_*nda 8 material angular-material2 angular
我想将自定义html从特定页面传递到模板组件,以便使用Material(MdDialog)创建对话框.直到现在我可以将简单数据传递给模板,如下所示:
import { Component, OnInit, Input, TemplateRef } from '@angular/core';
import { MdDialog, MdDialogConfig, MdDialogRef } from '@angular/material';
import { DialogComponent } from './dialog.component';
@Component({
selector: 'app-commoncontent',
template: '
<div class="row pull-right">
<button md-raised-button (click)="open()" >{{"addButton" | translate}}
</button>
</div>',
styleUrls: ['./commoncontent.component.css']
})
export class CommoncontentComponent implements OnInit {
constructor(public dialog : MdDialog) { }
ngOnInit() {
}
open() {
let config = new MdDialogConfig()
let dialogRef:MdDialogRef<DialogComponent> =
this.dialog.open(DialogComponent, config);
dialogRef.componentInstance.content = "Hello Angular"
}
}
import { Component, OnInit, Input, TemplateRef } from '@angular/core';
import { MdDialogRef } from '@angular/material'
import { CommoncontentComponent } from './commoncontent.component'
@Component({
selector: 'dialog-common',
template: '
<md-dialog-content class="accent-color">
<form class="form-horizontal" name="dialogForm">
{{content}}
</form>
</md-dialog-content>',
styleUrls: ['./dialog.component.css']
})
export class DialogComponent {
//@Input() templateDialog: TemplateRef<any>
content:string;
constructor(public dialogRef: MdDialogRef<DialogComponent>) {}
}
Run Code Online (Sandbox Code Playgroud)
但我无法传递HTML.我知道我可以使用ng-content,但我无法使其工作.
Edr*_*ric 12
以下代码块现在更新为最新版本@angular/material.
还有一个关于如何传递自定义HTML的新示例,它现在显示了如何将数据传递到对话框.
DomSanitizer#sanitize应该用来代替DomSanitizer#bypassSecurityTrustHtml.(谢谢@binarylobster!)
Pipe)要传递自定义HTML,只需将一个[innerHtml]="htmlContent"属性htmlContent作为HTML的清理版本(在本例中为a @Pipe())添加到选择器(例如span):
my-dialog.component.html:
<h3 matDialogTitle>My Dialog</h3>
<mat-dialog-content>
<div [innerHtml]="htmlContent | safeHtml"></div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button matDialogClose>Close Dialog</button>
</mat-dialog-actions>
Run Code Online (Sandbox Code Playgroud)
my-dialog.component.ts:
import {Component} from '@angular/core';
// Other imports here
@Component({
selector: 'my-dialog',
templateUrl: 'my-dialog.component.html'
})
export class MyDialog {
htmlContent: string;
}
Run Code Online (Sandbox Code Playgroud)
safehtml.pipe.ts:
import { DomSanitizer } from '@angular/platform-browser';
import { Pipe, PipeTransform, SecurityContext } from '@angular/core';
@Pipe({ name: 'safeHtml'})
export class SafeHtmlPipe implements PipeTransform {
constructor(private dom: DomSanitizer) {}
transform(value) {
// NOTE: Consider using DomSanitizer#sanitize instead of DomSanitizer#bypassSecurityTrustHtml, which executes code in `<script>` tags
return this.dom.sanitize(SecurityContext.HTML, value);
}
}
Run Code Online (Sandbox Code Playgroud)
app.component.ts (或者您想放置功能的地方):
import { MyDialog } from './my-dialog/my-dialog.component';
import { MatDialog } from '@angular/material/dialog';
export class AppComponent {
constructor(private dialog: MatDialog){}
htmlContent: string = '<p>Content goes here</p>';
openDialog() {
let dialogRef = this.dialog.open(MyDialog);
dialogRef.componentInstance.htmlContent = this.htmlContent;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在模块文件中声明管道:
@NgModule({
declarations: [
// Other declarations here
SafeHtmlPipe
]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
DomSanitizer)更新:清理HTML的另一种方法如下:
my-dialog.component.html:
<h3 matDialogTitle>My Dialog</h3>
<mat-dialog-content>
<div [innerHtml]="htmlContent"></div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button matDialogClose>Close Dialog</button>
</mat-dialog-actions>
Run Code Online (Sandbox Code Playgroud)
my-dialog.component.ts:
import { Component, OnInit } from '@angular/core';
import { SafeHtml } from '@angular/platform-browser';
@Component({
selector: 'my-dialog',
templateUrl: './my-dialog.component.html'
})
export class MyDialog {
htmlContent: string;
}
Run Code Online (Sandbox Code Playgroud)
app.component.ts:
import { MyDialog } from './my-dialog/my-dialog.component';
import { MatDialog } from '@angular/material/dialog';
import { DomSanitizer } from '@angular/platform-browser';
import { SecurityContext } from '@angular/core';
// ...
export class AppComponent {
htmlContent: string = '<p>Content goes here</p>';
constructor(private dialog: MatDialog, private dom: DomSanitizer){}
openDialog() {
let dialogRef = this.dialog.open(MyDialog);
dialogRef.componentInstance.htmlContent = this.dom.sanitize(SecurityContext.HTML, this.htmlContent);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10682 次 |
| 最近记录: |