在浏览器外使用 Angular2
Using Angular2 outside of browser
我希望构建一个 Angular2 应用程序,它可以 运行 以两种不同的方式 - 在 Electron 中或通过 CLI。
应用程序的底层组件基本上是一组服务。在应用程序的 Electron 版本中,这些服务将通过一组交互式组件公开,但是,对于 CLI 版本,它们将可以使用节点访问。
目前,我处于 research/PoC 阶段 - 试图确认这是可能的,并且出现了 2 个问题:
- Angular是否支持任何其他平台?看来bootstrap方法只适用于浏览器。
- 似乎 Angular2 不支持在服务中注入服务,除非它们都在 component/application 级别定义(即服务没有注入器)。我不热衷于在应用程序级别为我的所有服务添加所有依赖项——事实上这不会起作用,因为我需要非单例。有人为此开发了解决方法吗?
也许 Angular2 不适合这个。
- "other platforms" 到底是什么意思?
Angular2 是浏览器的 Web 框架。 Electron 使用浏览器,因此可以在那里使用。 Ionic 有一个从 Angular 到它的原生表示的转换层。
Angular 的构建方式使其可以扩展以在其他平台上使用。
- Angular2 确实支持向服务注入服务。它不支持在服务级别声明提供者。这仅支持
bootstrap()
和组件或指令。
I am not keen to add all my dependencies for all of my services at the application level
您可以在模块中创建包含所需提供程序的数组变量。如果一个模块需要它使用或导出的几个模块的提供者,一个模块可以从其他模块导出包含此类变量的变量。 Provider可以任意嵌套。然后,您可以导出一个或多个此类顶级变量以添加到 bootstrap()
或根组件或应定义提供程序范围的另一个组件。
in fact this won't work as I need non singletons. Has anyone developed a workaround for this?
前者与非单身人士无关。根据您需要哪种非单身人士,有不同的方法。
如果向组件添加提供程序,则此组件是维护单个实例的范围的根。该组件及其所有子组件(如果它们没有注册相同的提供者)将在每次请求时获得由该提供者维护的单个实例。
如果将提供者注册为工厂函数,则可以注入工厂以在每次调用工厂函数时获取一个新实例。
我希望构建一个 Angular2 应用程序,它可以 运行 以两种不同的方式 - 在 Electron 中或通过 CLI。
应用程序的底层组件基本上是一组服务。在应用程序的 Electron 版本中,这些服务将通过一组交互式组件公开,但是,对于 CLI 版本,它们将可以使用节点访问。
目前,我处于 research/PoC 阶段 - 试图确认这是可能的,并且出现了 2 个问题:
- Angular是否支持任何其他平台?看来bootstrap方法只适用于浏览器。
- 似乎 Angular2 不支持在服务中注入服务,除非它们都在 component/application 级别定义(即服务没有注入器)。我不热衷于在应用程序级别为我的所有服务添加所有依赖项——事实上这不会起作用,因为我需要非单例。有人为此开发了解决方法吗?
也许 Angular2 不适合这个。
- "other platforms" 到底是什么意思? Angular2 是浏览器的 Web 框架。 Electron 使用浏览器,因此可以在那里使用。 Ionic 有一个从 Angular 到它的原生表示的转换层。
Angular 的构建方式使其可以扩展以在其他平台上使用。
- Angular2 确实支持向服务注入服务。它不支持在服务级别声明提供者。这仅支持
bootstrap()
和组件或指令。
I am not keen to add all my dependencies for all of my services at the application level
您可以在模块中创建包含所需提供程序的数组变量。如果一个模块需要它使用或导出的几个模块的提供者,一个模块可以从其他模块导出包含此类变量的变量。 Provider可以任意嵌套。然后,您可以导出一个或多个此类顶级变量以添加到 bootstrap()
或根组件或应定义提供程序范围的另一个组件。
in fact this won't work as I need non singletons. Has anyone developed a workaround for this?
前者与非单身人士无关。根据您需要哪种非单身人士,有不同的方法。
如果向组件添加提供程序,则此组件是维护单个实例的范围的根。该组件及其所有子组件(如果它们没有注册相同的提供者)将在每次请求时获得由该提供者维护的单个实例。
如果将提供者注册为工厂函数,则可以注入工厂以在每次调用工厂函数时获取一个新实例。