【问题标题】:Using Angular2 outside of browser在浏览器之外使用 Angular2
【发布时间】:2016-10-14 10:12:10
【问题描述】:

我希望构建一个 Angular2 应用程序,它可以以两种不同的方式运行 - 在 Electron 中或通过 CLI。

基本上,应用程序的底层组件是一组服务。在应用程序的 Electron 版本中,这些服务将通过一组交互式组件公开,但是对于 CLI 版本,它们将可以使用节点访问。

目前,我处于研究/PoC 阶段 - 试图确认这是可能的,并且出现了 2 个问题:

  1. Angular 是否支持任何其他平台?看来bootstrap方法只适用于浏览器。
  2. 似乎 Angular2 不支持在服务中注入服务,除非它们都在组件/应用程序级别定义(即服务没有注入器)。我并不热衷于在应用程序级别为我的所有服务添加我的所有依赖项——事实上这不会起作用,因为我需要非单例。有没有人为此制定了解决方法?

也许 Angular2 不适合这个。

【问题讨论】:

    标签: dependency-injection angular electron


    【解决方案1】:
    1. “其他平台”到底是什么意思? Angular2 是浏览器的 Web 框架。 Electron 使用浏览器,因此可以在那里使用。 Ionic 有一个从 Angular 到其原生表示的转换层。

    Angular 的构建方式可以扩展为在其他平台上使用。

    1. Angular2 确实支持向服务注入服务。它不支持在服务级别声明提供程序。这仅在 bootstrap() 和组件或指令上受支持。

    我并不热衷于在应用程序级别为我的所有服务添加所有依赖项

    您可以在模块中创建包含所需提供程序的数组变量。如果一个模块需要它使用或导出的多个模块的提供者,则一个模块可以导出包含来自其他模块的此类变量的此类变量。 Provider可以任意嵌套。然后,您可以导出一个或多个此类顶级变量以添加到 bootstrap() 或根组件或应定义提供程序范围的另一个组件。

    事实上,这行不通,因为我需要非单身人士。有没有人为此制定了解决方法?

    前者与非单例无关。根据您需要的非单件类型,有不同的方法。

    如果您将提供程序添加到组件,则此组件是维护单个实例的范围的根。此组件及其所有子组件(如果它们没有注册相同的提供程序)将在每次请求时获得此提供程序维护的单个实例。

    如果您将提供程序注册为工厂函数,则可以注入工厂以在每次调用工厂函数时获取一个新实例。

    【讨论】:

    • 您真的想构建一个没有图形 GUI 的 Angular CLI 应用程序吗? Angular 被构建为能够在没有 GUI 的情况下运行(github.com/angular/universal),但这仅用于特定目的(SEO 和加载后更快的初始视图)。基本上你只需要提供一个自定义渲染器就可以在节点上运行它并使用替代的输入/输出而不是浏览器。
    • 感谢 Günter - 感谢您抽出宝贵时间。 “其他平台”是指命令行界面(节点)而不是浏览器。因此,我假设我不能使用组件,因为没有 HTML 表示。相反,我想我会创建通过组件(在电子中)或通过 CLI 触发的服务(标准 JS 类)。我喜欢你使用工厂来创建类的非单例版本的方法,但是,在理想的世界中,我可以指定服务的提供者——对我来说,这绝对是一种限制。
    • 其实你可以使用组件,但是如前所述,你需要一个自定义的渲染器。无法指定服务提供商是一个限制。还有其他的。请考虑到 Angular2 是一个全新的框架,与它的前身几乎没有相似之处,并且 Angular2 仍然是预发布的。这意味着当优先级高的功能被淘汰时,会有改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2010-09-27
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多