Angular 2 相当于 ng-bind-html、$sce.trustAsHTML() 和 $compile?

2024-04-10

在 Angular 1.x 中,我们可以使用 HTML 标签实时插入 HTMLng-bind-html,结合JavaScript调用$sce.trustAsHTML()。这让我们完成了 80% 的工作,但在使用 Angular 标签时不起作用,例如如果您插入使用的 HTMLng-repeat或自定义指令。

为了让它发挥作用,我们可以使用调用 $compile 的自定义指令 https://stackoverflow.com/questions/18926306/angularjs-ng-bind-html-unsafe-replacement.

在 Angular 2 中这一切的等价物是什么?我们可以使用绑定[inner-html]但这仅适用于非常简单的 HTML 标签,例如<b>。它不会将自定义 Angular 2 指令转换为功能性 HTML 元素。 (很像 Angular 1.x,但没有$compile步骤。)相当于什么$compile对于角度 2?


在 Angular2 中你应该使用动态组件加载器 https://angular.io/docs/js/latest/api/core/DynamicComponentLoader-class.html在页面上插入一些“编译内容”。例如,如果你想编译下一个 html:

<div>
    <p>Common HTML tag</p>
    <angular2-component>Some angular2 component</angular2-component>
</div>

然后你需要用这个 html 作为模板创建组件(我们称之为CompiledComponent)并使用DynamicComponentLoader将此组件插入页面上。

@Component({
  selector: 'compiled-component'
})
@View({
  directives: [Angular2Component],
  template: `
    <div>
      <p>Common HTML tag</p>
      <angular2-component>Angular 2 component</angular2-component>
    </div>
  `
})
class CompiledComponent {
}

@Component({
  selector: 'app'
})
@View({
  template: `
    <h2>Before container</h2>
    <div #container></div>
    <h2>After conainer</h2>
  `
})
class App {
  constructor(loader: DynamicComponentLoader, elementRef: ElementRef) {
    loader.loadIntoLocation(CompiledComponent, elementRef, 'container');
  }
}

查看这个笨蛋 http://plnkr.co/edit/SvhzsaAx7kvH245wDfmb?p=preview

UPD您可以在之前动态创建组件loader.loadIntoLocation() call:

// ... annotations
class App {
  constructor(loader: DynamicComponentLoader, elementRef: ElementRef) {
    // template generation
    const generatedTemplate = `<b>${Math.random()}</b>`;

    @Component({ selector: 'compiled-component' })
    @View({ template: generatedTemplate })
    class CompiledComponent {};

    loader.loadIntoLocation(CompiledComponent, elementRef, 'container');
  }
}

我个人不喜欢它,对我来说它看起来像是一个肮脏的黑客。但这里是笨蛋 http://plnkr.co/edit/YYyMwVAakktn2FoVhKN4?p=preview

PS请注意,此时 angular2 正在积极开发中。所以情况随时可能改变。

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

Angular 2 相当于 ng-bind-html、$sce.trustAsHTML() 和 $compile? 的相关文章

随机推荐

  • 创建 React 应用程序 - 如何将 pdf.worker.js 文件从 pdfjs-dist/build 复制到项目的输出文件夹?

    由于我无法在要使用该应用程序的网络中使用浏览器的 pdf 查看器 因此我正在测试反应 pdf https www npmjs com package react pdf用于使用 React 加载 PDF 的包 我制作了一个组件 用于发送从后
  • 如何在 SQL Server 中查找运行跟踪?

    有没有一种简单的方法来确定已设置的痕迹sp trace create在 SQL Server 2000 上 SQL Server 2005 2008 2012 或 2014 怎么样 SQL Server 2005 向前 SELECT FRO
  • 我可以在 Composer 中存在循环依赖吗?

    我正在编写一个包 A 它是其他一些包 B 所需要的 而我现在还没有发布该包 B 在某些时候 A 将被更改为使用自身 B 很可能它们应该在同一个包中 但我更喜欢将这两件事分开 只是为了干净起见 更重要的是 因为 B 只是对 A 的开发依赖 p
  • 片段未显示

    我遇到一个问题 我可以创建一个片段 它的视图似乎已创建 但没有显示 片段本身已创建 内部的任何代码都可以正常运行 但它只是在某处不可见 后退按钮也可以很好地与它交互 它 关闭 它 它只是没有实际显示在屏幕上 仅显示主布局 来自我的 Frag
  • 禁用 iPhone 4S / 新 iPad 键盘上的听写按钮

    我们的应用程序是一个医疗保健应用程序 我们的应用程序中有一个符合 HIPAA 标准的语音识别器 所有听写都可以通过它进行 医院不希望医生意外开始与不符合 HIPAA 标准的 Nuance Dragon 服务器进行对话 因此 我正在寻找可以抑
  • 我可以在 NHibernate 中使用表值函数作为查询源吗?

    正如您可能已经猜到的 亲爱的社区 我有一个问题要问您 所以 我希望 NHibernate 根据表值 sql 函数的评估来过滤查询结果 NHibernate 生成的可能的 SQL 查询可能类似于以下内容 SELECT whatever FRO
  • Android Studio 中出现错误:INSTALL_FAILED_OLDER_SDK

    我刚刚安装了 Android Studio 并正在从 Eclipse 移植我的项目 当我尝试仅在我的手机 4 4 2 API 19 上运行该应用程序时 出现错误Failure INSTALL FAILED OLDER SDK 我的 buil
  • UIScrollView 内视图中的 UIgestureRecognizer

    有没有人设法让 UIGestureRecognizer 在作为 UIScrollView 子视图的 UIView 上工作 我的回调似乎从未被调用 作为一个简单的示例 我想要一个分页滚动视图 并在第三页上使用 UITapGestureReco
  • Flexbox:带有粘性页脚的可滚动内容

    我想制作一个盒子 在本例中为弹性项目 它始终位于容器的中间 在该框中 有页眉 页脚和内容部分 如果内容的高度变得太大 我希望内容部分可以滚动 页眉和页脚应始终可见 并且框应始终保留在其容器中 这是我能够写的内容 HTML div class
  • 如何跟踪 SSIS 数据流任务中成功处理或失败的行的状态?

    我有一个非常简单的数据流任务从 FF 读取数据并将数据插入表中 同时我想在审计表中写入 插入了多少行 创建日期 我怎样才能轻松做到这一点 如果您只对成功处理的行数或遇到错误的行数感兴趣 那么您可以使用内置的SSIS logging特征 请检
  • 使用 Omni Thread Library 在 Delphi 中异步获取函数结果

    我试图从另一个单元 类调用一个函数 这需要一些时间来执行任务并返回一个字符串值 我找不到类似于 C async await 的好的参考 比如 Delphi 中的简单方法 使用 Omni Thread 库对我来说似乎是个好主意 一个简单的例子
  • 在子目录(而不是根目录)中运行 Wordpress

    我有一个wordpress网站 当前运行在我网站的子目录中 基本上我的结构如下 根 wp 我想将 wordpress wp 文件夹保留在同一位置 但让它直接从根 url 加载 wordpress 网站 例如 当前当我访问 www mysit
  • 用于分析 Node.js 核心转储的工具 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如果我使用 gcore 制作 Node js 进程的代码转储 分析它的最佳工具是什么 灵感来自 jav
  • 为什么 TypeScript 不简化类型与其超类型之一的交集?

    有没有办法让 TypeScript 的检查器简化交集类型中不必要的元素 或者我错认为它们是不必要的 IIUC 类型SubType SuperType相当于SubType 但 typescript 似乎没有执行这种简化 如下所示 我定义了一个
  • 删除重复的SQL记录

    删除表中重复名称的记录的最简单方法是什么 我遇到的答案非常令人困惑 Related 从表中删除重复记录 https stackoverflow com questions 529098 removing duplicate rows fro
  • 使用 Maven 程序集插件创建 EAR [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我尝试使用
  • R Shiny - 如何使用第 2 列中的嵌套行生成此布局

    我想在 Fluid9 下有两行 但这不起作用 第一行应该有 3 个图 而第二行应该只有 1 个图 跨越第一行 3 个图的宽度 9 我缺少什么 我正在尝试得到类似的东西this http shinyprognostics de pemDemo
  • startActivityForResult() 已弃用用于 google 登录

    我想让谷歌登录我的应用程序 但我收到此错误 startActivityForResult deprecated in java 这是我的代码 val signInIntent googleSignInClient signInIntent
  • R 函数胶水与粘贴

    我最近发现了胶水包 经过一番研究后我不明白为什么glue glue应该优先于paste 根据这个网站 https cran r project org web packages glue vignettes speed html 胶水速度慢
  • Angular 2 相当于 ng-bind-html、$sce.trustAsHTML() 和 $compile?

    在 Angular 1 x 中 我们可以使用 HTML 标签实时插入 HTMLng bind html 结合JavaScript调用 sce trustAsHTML 这让我们完成了 80 的工作 但在使用 Angular 标签时不起作用 例