【问题标题】:What's the best way to get a ComponentFactory in Angular 4 Dart?在 Angular 4 Dart 中获取 ComponentFactory 的最佳方法是什么?
【发布时间】:2017-10-26 14:43:37
【问题描述】:

AngularDart Github 存储库中有用于组件加载的文档 (https://github.com/dart-lang/angular/blob/master/doc/component_loading.md),建议导入组件的模板文件(已生成),然后访问该模板上的属性,您只需获取组件的名称并将 NgFactory 附加到它。

import 'foo.template.dart' as ng;

void doSomething() {
  ng.FooComponentNgFactory;
  //             ^^^^^^^^^
}

但我的 IDE (IntelliJ) 看不到 foo.template.dart,因为它尚未生成并给我警告,然后它对 FooComponentNgFactory 也一无所知。由于 Dart 是动态的,这一切都可以在运行时解决,但它让我的 IDE 中出现警告/错误,我不想养成不得不忽略的习惯,而且整个事情对我来说就像是代码的味道。

我还可以通过使用 ComponentResolver 获得工厂,这不需要使用生成的模板文件,或 NgFactory。我能看到的唯一缺点是它是一个async 方法,在我的情况下这不是问题。

@Component(selector: 'some-component', template: '')
class SomeComponent {
  SomeComponent(this._resolver);

  ComponentResolver _resolver;

  Future doSomething() async {
    ComponentFactory factory = await _resolver.resolveComponent(FooComponent);
  }
}

在查看 ComponentResolver 的文档时,我没有看到任何不使用它的理由 (https://webdev.dartlang.org/api/angular/angular/ComponentResolver-class)。

为什么这不是获得 ComponentFactory 的公认方式?我是在使用 NgFactory 时做错了什么,还是在使用 ComponentResolver 时需要小心我遗漏了什么?

【问题讨论】:

标签: angular intellij-idea dart angular-dart


【解决方案1】:

我们不想使用解析器有两个原因:

  • 它需要组件类型和工厂之间的映射。 有了这张地图,Dart2JS 不知道是否正在使用这段代码 不能动摇树。目前任何导入的组件都在我们的最后 可执行文件,即使我们不使用它们。
  • 我们可以通过不需要异步操作来加快速度。

树摇晃是主要原因。

【讨论】:

  • 谢谢,有道理!
  • 这个和分析仪有问题吗?我想订阅它
猜你喜欢
  • 2018-03-29
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 2019-06-29
相关资源
最近更新 更多