Angular:在 [innerHtml] 内绑定变量

2024-02-09

我正在尝试使用 [innerHtml] 在 div 内绑定数据。如何通知 Angular 使用变量而不是原始文本。这是我的设置:

<div *ngFor="let data of someData">
    <div *ngFor="let odata of someOtherData;trackBy:id">
        <div [innerHTML]="odata.template | pipeToSanitize"></div>
    </div>
</div>

数据如下:

someOtherData = [{
                    'id': 1,
                    'template': '<div class="{{data.class}}"><md-icon>{{data.icon}}</md-icon></div>'
                }, 
                {
                    'id': 2,
                    'template': '<div>{{data.timestampStr}}</div>'
                }, 
                {
                    'id': 3,
                    'template': '<div>{{data.message}}</div>'
                }]

someData = [{
               'message': 'Message 1',
               'timestampStr': '2016/12/13 09:25:00',
               'class': 'events-warn-color',
               'icon': 'warning'
            }, 
           {
               'message': 'Message 2',
               'timestampStr': '2016/12/13 10:36:00',
               'class': 'events-warn-color',
               'icon': 'warning'
           }];

现在我得到了 {{data.icon}} 等。就这样。如何将其替换为“someOtherData”对象中的内容。提前致谢


您必须创建编译器指令来评估模板字符串:

编译指令.ts

  @Directive({
    selector: '[compile]'
  })
  export class CompileDirective implements OnChanges {
    @Input() compile: string;
    @Input() compileContext: any;

    compRef: ComponentRef<any>;

    constructor(private vcRef: ViewContainerRef, private compiler: Compiler) {}

    ngOnChanges() {
      if(!this.compile) {
        if(this.compRef) {
          this.updateProperties();
          return;
        }
        throw Error('You forgot to provide template');
      }

      this.vcRef.clear();
      this.compRef = null;

      const component = this.createDynamicComponent(this.compile);
      const module = this.createDynamicModule(component);
      this.compiler.compileModuleAndAllComponentsAsync(module)
        .then((moduleWithFactories: ModuleWithComponentFactories<any>) => {
          let compFactory = moduleWithFactories.componentFactories.find(x => x.componentType === component);

          this.compRef = this.vcRef.createComponent(compFactory);
          this.updateProperties();
        })
        .catch(error => {
          console.log(error);
        });
    }

    updateProperties() {
      for(var prop in this.compileContext) {
        this.compRef.instance[prop] = this.compileContext[prop];
      }
    }

    private createDynamicComponent (template:string) {
      @Component({
        selector: 'custom-dynamic-component',
        template: template,
      })
      class CustomDynamicComponent {}
      return CustomDynamicComponent;
    }

    private createDynamicModule (component: Type<any>) {
      @NgModule({
        // You might need other modules, providers, etc...
        // Note that whatever components you want to be able
        // to render dynamically must be known to this module
        imports: [CommonModule],
        declarations: [component]
      })
      class DynamicModule {}
      return DynamicModule;
    }
  }

Template

<div *ngFor="let data of someData">
    <div *ngFor="let odata of someOtherData;">
          <ng-container *compile="odata.template; context:{data:data}"></ng-container>
    </div>
</div>

您仍然需要处理角度材料模块,我没有在我的在线示例中暗示这一点,只需检查编译直接注释

stackblitz模板编译 https://stackblitz.com/edit/angular-template-compile

检查这个Angular2,从组件内的字符串评估模板 https://stackoverflow.com/questions/44077994/angular2-evaluate-template-from-string-inside-a-component

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular:在 [innerHtml] 内绑定变量 的相关文章

随机推荐

  • 通过OData读取数据:如何通过curl/RCurl指定身份验证方案?

    我想通过 HTTPS 读取一些数据OData http www odata org 连接和数据源需要Basic认证方案 我很熟悉平常的curl http curl haxx se RCurl http cran r project org
  • 无法使用项目列表(数组)读取自定义事实

    我创建了自定义事实 gt etc ansible facts d hdfs fact 当我使用以下命令运行剧本时 debug var ansible local hdfs run once true 我如预期得到以下答案 PLAY all
  • 管理 Google 地图 API 密钥

    我的应用程序使用大量 MapView 屏幕 我正在尝试找出如何管理调试环境和生产环境之间的 API 密钥 显然 无法更改 Eclipse 中的调试应用程序密钥 因此我必须在该环境中使用调试映射 API 密钥 相反 如果没有生产应用程序密钥
  • AS3 处理任意大文件

    我正在尝试读取 AS3 中的一个非常大的文件 但我遇到了运行时崩溃的问题 我目前正在使用文件流 http help adobe com en US Flex 4 0 langref flash filesystem FileStream h
  • NHibernate.LazyInitializationException

    我们一直偶尔会出现这个问题 但现在我每次都可以重现它 我正在增加自定义论坛上的查看计数器 这会导致错误 NHibernate LazyInitializationException 未能延迟初始化集合 没有会话或会话被关闭 此错误发生在对象
  • 从 virtualenv 中启动 wsgi 应用程序作为 Linux 系统服务

    我目前正在 virtualenv 中开发一个 Bottle 应用程序 我打算使用 bjoern WSGI 服务器来提供它 但这可能并不重要 我还打算使用 lighty 或 nginx 反向代理来为应用程序提供服务 无论如何 应用程序可以作为
  • ECS任务如何知道在哪个区域运行?

    我有一个在 ECS 启动的任务中使用 boto3 的 python 应用程序 在 docker 容器中 我使用的 boto3 命令需要一个区域才能正常工作 但我只知道运行时的区域 多区域应用程序 当时的想法是定义AWS DEFAULT RE
  • 在 if 条件下改变字符串变量

    我使用这个程序将输入 mm 作为一年中的月份并打印出月份的名称 include
  • 如何根据 UIAlertController 中的 UITextField 禁用 UIAlertAction?

    我正在使用一个UIAlertController向用户呈现一个对话框以输入5 位 CRN 我想要Add按钮将被禁用 直到字段中有五位且仅有五位数字 UITextField 用户界面如下所示 以下是为以下内容设置的属性UIAlertContr
  • 如何从 docker 镜像中删除 ENV 设置

    我有一个设置 HOME 和 PATH 的 docker 映像 config HOME 我知道我可以替换它 但是是否可以删除它 并使用正常的 bash 配置文件设置 我不想通过破解 shell 配置文件来覆盖它 我无法让 creack 的答案
  • Java 6正则表达式一组的多个匹配

    这是简单的模式 key value1 value2 value3 valueN 我想得到 key 值数组 这是我的正则表达式 这是我的文字 foo a b c d Matcher给了我 2 组 foo 作为键 和d 作为值 如果我使用 代替
  • Java 硬件中断处理

    我想知道当硬件中断发生时是否可以自动调用Java方法 可能还有其他选择 我正在做类似的事情 在一个应用程序中 我监视 4 只鼠标的点击情况 这些点击会产生中断 但我很高兴不直接从 Java 处理它们 在Linux下 原来有设备文件 dev
  • 检查角度 2 中是否存在路线

    我想检查角度项目中是否存在路线 例如用户类型http localhost 4200 timestamp在网址栏中和timestamp项目中不存在 如何在不重定向的情况下进行检查 Sajeetharan 的回答涉及router config是
  • 如果命令在 mac 终端内运行,如何让 shell_exec 表现得像命令一样?

    当我在 php 脚本中运行命令时 echo shell exec which php 我得到以下输出 usr bin php 但是 当在 mac 终端中运行相同的命令时 which php 我得到以下输出 php aliased to Ap
  • Django 管理命令导入错误

    我在导入模块时遇到问题qsl management commands
  • SQL Server 中符号 @@ 的含义

    符号的含义是什么 在 SQL Server 中 在 SQL Server 中 符号 是全局变量的前缀 服务器维护所有全局变量 我们不能宣布它们
  • 了解模板方法模式

    据我了解 模板方法只不过是调用子类中定义的虚拟或抽象方法的普通方法 我是对的吗 还是我错过了关于这种模式的其他重要内容 abstract class Foo public void IamTemplateMethod which will
  • 将大型网站从 MySQL 切换到 MySQLi [重复]

    这个问题在这里已经有答案了 我想从 MySQL 切换到 MySQLi 但我有一个非常大的网站 我读到了https wikis oracle com display mysql Converting to MySQLi https wikis
  • 使用 std::map/boost::unordered_map 帮助理解段错误

    我有一些代码使用模板静态类来处理资源 图像 字体 网格数据等 管理 允许客户端代码执行以下操作 ResourceManager
  • Angular:在 [innerHtml] 内绑定变量

    我正在尝试使用 innerHtml 在 div 内绑定数据 如何通知 Angular 使用变量而不是原始文本 这是我的设置 div div div div div div 数据如下 someOtherData id 1 template d