【发布时间】:2013-12-23 18:49:49
【问题描述】:
我想根据从 AJAX 调用收到的一些信息动态构建组件树。
如何以编程方式从其他组件内部将组件添加到 DOM?我有<outer-comp>,我想根据一些逻辑插入一个<inner-comp>。以下代码只是将元素 <inner-comp></inner-comp> 插入到 DOM 中,而不是实际的 <inner-comp> 表示。
@NgComponent(
selector: 'outer-comp',
templateUrl: 'view/outer_component.html',
cssUrl: 'view/outer_component.css',
publishAs: 'outer'
)
class AppComponent extends NgShadowRootAware {
void onShadowRoot(ShadowRoot shadowRoot) {
DivElement inner = shadowRoot.querySelector("#inner");
inner.appendHtml("<inner-comp></inner-comp>");
}
}
更新: 我设法通过以下方式正确渲染内部组件,但我仍然不确定这是否是正确的方式:
class AppComponent extends NgShadowRootAware {
Compiler compiler;
Injector injector;
AppComponent(this.compiler, this.injector);
void onShadowRoot(ShadowRoot shadowRoot) {
DivElement inner = shadowRoot.querySelector("#inner");
inner.appendHtml("<inner-comp></inner-comp>");
BlockFactory template = compiler(inner.nodes);
var block = template(injector);
inner.replaceWith(block.elements[0]);
}
}
【问题讨论】:
-
你能展示你如何调用你的 AppComponent 构造函数吗?你如何创建一个新的编译器和一个新的注入器?
-
@0xor1 不需要调用构造函数——这就是依赖注入的作用;-)
-
那么你将如何在不在 NgComponent 类中的代码中实现这一点?说在你想调用
document.body.appendHtml('<my-comp></my-comp>')的主要方法中,你将如何获得角度来编译它?
标签: dart angular-dart shadow-dom