关于javascript:使用绑定将角度组件编译为HTML

Compile angular component to HTML with bindings

我需要为我的地图标记Baloon主体提供一个实心HTML字符串。我想让Baloon成为一个有角度的组件,并使用绑定和内置指令(*ngFor, *ngIf等)。所以我正在寻找一种方法来评估组件模板中的所有绑定,并将结果编译成一个字符串…如何实现这一点,或者如果这种方法是非角度的——推荐什么样的模式?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Component

import {Component} from '@angular2/core';
import {AnyThing} from './somewhere/in/my/app/anything.model.ts';

@Component({
  selector: 'my-baloon-window',
  template: `<p>
This is a baloon for {{ any.name }}
</p>`
})
export class MyBaloonWindowComponent {
    constructor(public something: AnyThing) {}
}


// Implementation

import {AnyThing} from './somewhere/in/my/app/anything.model.ts';
import {MyBaloonWindowComponent} from './path/to/baloon-window.component';

/* { ...some code here... } */

private createBaloonWindow(thing: AnyThing): google.maps.InfoWindow {
    return new ymap.map.BaloonWindow({
      /* I want something like this */
      content: new MyBaloonWindowComponent(thing).toString()
      /* ^ this is what I want ^ */
    });
}


我有点惊讶,没有人建议使用Angular Universal——是的,至少在2.0兼容版本中,它呈现了整个文档,但是您可以将单个组件加载到页面中,使用Angular Universal呈现为HTML字符串,然后去掉标记等。

https://github.com/angular/universal网站

Angular Universal设计用于在服务器端呈现HTML,这从根本上讲是在不依赖于DOM的情况下将呈现引擎公开给代码。

同样需要注意的是,如果你想在角4中直接访问RendererRootRenderer,你必须使用RendererFactory生成一个新的实例,但是这两个都是在角2中直接暴露的。

https://jaxenter.com/angular-4-top-features-133165.html网站


您可以尝试将MyBaloonWindowComponent呈现到隐藏的DIV中,然后使用延迟,即setTimeout(..., 0)或更高级的调度、助手服务或自定义事件接收来自注入ElementRef的HTML。

可以创建特殊的组件(如NgComponentOutlet)+服务来进行渲染,然后将生成的HTML发送到客户机代码。