angular.dart如何以编程方式创建自定义组件并添加到页面?

时间:2014-04-20 15:12:13

标签: dart angular-dart

是否可以定义angular-dart组件,然后以编程方式创建该组件的实例并将其添加到您的网页?我希望可能有类似的东西:

import 'package:web_sandbox/web_sandbox.dart';
import 'package:angular/angular.dart' as ng;

void main() {
  document.body.appendHtml('<web-sandbox-component></web-sandbox-component>');
  var node = document.body.query('web-sandbox-component');
  ng.compile(node);
}

是否以编程方式创建一个角度Web组件并将其添加到页面中,可能就像上面的伪示例一样,如果是这样的话?

1 个答案:

答案 0 :(得分:3)

我不认为Angular可以做到这一点。

您可以将HTML标记<web-sandbox-component>添加到DOM中,并告诉Angular它应该处理这个新的HTML,然后Angular将为此标记实例化Angular组件(这就是您链接的问题)。 / p>

我不认为这是一个限制。 你有什么想做的事情似乎不可能这样吗?。

修改

您在main中的代码应如下所示:

我的文档看起来像

...
<body>
  <div id="mydiv"></div>
  ...
</body>

我将<web-sandbox-component>追加到div

main() {
  print('main');
  ng.Injector inj = ngaf.applicationFactory().addModule(new MyAppModule()).run();
  var node = dom.querySelector('#mydiv');
  node.append(new dom.Element.html('<web-sandbox-component></web-sandbox-component>', validator: new dom.NodeValidatorBuilder()..allowCustomElement("web-sandbox-component")));
  ng.Compiler compiler = inj.get(ng.Compiler);
  ng.DirectiveMap directiveMap = inj.get(ng.DirectiveMap);
  compiler(node.childNodes, directiveMap)(inj, node.childNodes);
}