热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用带有Angular2/4的材质将html传递给模板对话框组件

如何解决《如何使用带有Angular2/4的材质将html传递给模板对话框组件》经验,为你挑选了1个好方法。

我想将自定义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: '
       
', styleUrls: ['./commoncontent.component.css'] }) export class CommoncontentComponent implements OnInit { constructor(public dialog : MdDialog) { } ngOnInit() { } open() { let cOnfig= new MdDialogConfig() let dialogRef:MdDialogRef = 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: ' {{content}} ', styleUrls: ['./dialog.component.css'] }) export class DialogComponent { //@Input() templateDialog: TemplateRef content:string; constructor(public dialogRef: MdDialogRef) {} }

但我无法传递HTML.我知道我可以使用ng-content,但我无法使其工作.



1> Edric..:
更新

更新#1

以下代码块现在更新为最新版本@angular/material.

还有一个关于如何传递自定义HTML的新示例,它现在显示了如何将数据传递到对话框.

更新#2

DomSanitizer#sanitize应该用来代替DomSanitizer#bypassSecurityTrustHtml.(谢谢@binarylobster!)


方法1(Pipe)

要传递自定义HTML,只需将一个[innerHtml]="htmlContent"属性htmlContent作为HTML的清理版本(在本例中为a @Pipe())添加到选择器(例如span):

my-dialog.component.html:

My Dialog

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;
}

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 `` tags
    return this.dom.sanitize(SecurityContext.HTML, value);
  }
}

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 = '

Content goes here

'; openDialog() { let dialogRef = this.dialog.open(MyDialog); dialogRef.componentInstance.htmlCOntent= this.htmlContent; } }

然后,在模块文件中声明管道:

@NgModule({
  declarations: [
    // Other declarations here
    SafeHtmlPipe
  ]
})
export class AppModule {}

方法2(DomSanitizer)

更新:清理HTML的另一种方法如下:

my-dialog.component.html:

My Dialog

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;
}

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 = '

Content goes here

'; constructor(private dialog: MatDialog, private dom: DomSanitizer){} openDialog() { let dialogRef = this.dialog.open(MyDialog); dialogRef.componentInstance.htmlCOntent= this.dom.sanitize(SecurityContext.HTML, this.htmlContent); } }

Stackblitz演示(展示两个例子)


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了解决IE678伪类不兼容问题的方法,包括少用CSS3和HTML5独有的属性,使用CSS hacker,使用last-child清除浮动、批量添加标签、去掉list item最后一个的border-right等技巧。同时还介绍了使用after清除浮动时加上IE独有属性zoom:1的处理方法。另外,本文还提到可以使用jQuery代替批量添加标签的功能,以及使用负边距和CSS2选择器element+element去掉list item最后一个的border-right的方法。 ... [详细]
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  •   CSS网页布局中不推荐使用的HTML标签,请尽量不要使用这些HTML标签。  Donotusethesehtmlelementsinhtmlpages.  Presentationalelementsshouldnotbeused ... [详细]
  • VS2010MFC(对话框:为对话框添加控件)
    转自:http:www.jizhuomi.comsoftware151.html上一讲创建了一个名为“Addition”的工程,目的是生成一个实现加法运 ... [详细]
author-avatar
qapo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有