我有HeroMockService这将返回模拟数据HeroService,并将回调终端服务从数据库中检索英雄.
假设Angular2已建立的环境,我打算注入HeroMockService到AppComponent如果当前构建环境"dev-mock".如果是当前构建环境"dev-rest",则HeroService应该注入AppComponent.
我想知道如何实现这一目标?
我有用TypeScript编写的node.js应用程序,我需要根据配置文件在两个接口实现之间切换.目前我有这个代码似乎工作.
"use strict";
import { config } from "../config";
let Something;
if (config.useFakeSomething) {
Something = require("./FakeSomething").FakeSomething;
} else {
Something = require("./RealSomething").RealSomething;
}
...
let s = new Something();
s.DoStuff();
...
Run Code Online (Sandbox Code Playgroud)
但我对此有不好的感觉(主要是因为加载模块的混合需求和导入).还有其他方法如何在不导入两个模块的情况下实现基于配置文件的实现切换?
是否可以根据条件导入模块?具体来说,仅当在浏览器中而不是在服务器中渲染angular 2通用应用程序时,才导入外部模块。
这个问题与某些依赖浏览器功能的PrimeNG模块有关,只能在浏览器中呈现。最好在服务器渲染时省略它们,因为日历和其他组件对于SEO并不真正重要。
目前,如果关闭服务器渲染,则可以渲染日历组件。但是,当我在app.module.ts中包含以下代码并打开服务器渲染时,服务器在button.js中产生错误“ ReferenceError:未定义事件”。
import { CalendarModule } from 'primeng/components/calendar/calendar';
@NgModule({
...
imports: [
...,
CalendarModule
]
})Run Code Online (Sandbox Code Playgroud)
角度提供了一个isBrowser条件。
import { isBrowser } from 'angular2-universal';Run Code Online (Sandbox Code Playgroud)
但是我不知道如何将其用于条件导入。是否真的有针对模块的方法?