微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在Angular 1.x中,我们可以使用 HTML标签ng-bind-html,结合 JavaScript调用$sce.trustAsHTML()实时地插入HTML.这使我们有80%的方式,但是在使用角度标签时不会工作,例如,如果您插入使用了ng重复或自定义指令的HTML.

要做到这一点,我们可以使用custom directive that called $compile.

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

解决方法

在Angular2中,您应该使用 DynamicComponentLoader页面上插入一些“编译内容”.所以例如如果你想编译下一个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');
  }
}

退房this plunker

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

// ... 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,'container');
  }
}

我个人不喜欢它,它看起来像一个肮脏的黑客给我.但这里是the plunker

PS请注意,此刻,角度2正在积极发展.所以情况可以随时改变.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Mip是什么意思以及作用有哪些
怎么测试Mip页面运行情况
MIP安装的具体步骤有哪些
HTML添加超链接、锚点的方法及作用详解(附视频)
MIP的规则有哪些
Mip轮播图组件中的重要属性讲解
Mip的内联框架组件是什么
怎么创建初始的MIP配置及模板文件
HTML实现多选框及无法提交多数据的原因分析(附视频)
HTML如何设置复选框、单选框以及默认选项?(图文+视频)