我有一个 rxjs ReplaySubject,它会根据我所处的环境发出一个值或 null。这意味着如果在某个环境中我拨打服务电话并获取数据。如果我不在那个环境中,我只是在重播主题上调用 next(null) 。如果进行了服务调用,在我订阅的组件中一切正常。如果我已经完成 next(null) 那么我的回调永远不会被触发。
我的假设是不会返回空值,因为它是在我订阅之前设置的,但我认为这是 ReplaySubject 的全部内容。然后我用谷歌搜索,直到我用完了不同的方法来解释这个问题,我得到的只是 ReplaySubject 的自述文件。希望有人能告诉我我做错了什么。我想可能是因为我传入了 null,所以我传入了“Hello”,但仍然没有。这是一个代码示例:
public Data = new ReplaySubject<any>(1);
init(){
if(!window.Something){
//subscribe callback is never fired in this case.
this.Data.next(null);
}else{
this.http.get(...).map(...{
//this works
this.Data.next(result);
});
}}
Run Code Online (Sandbox Code Playgroud)
我犯的错误实际上与 Rx 无关。我记不清了,但它正在制造,所以条件永远不是真的。这使代码无法执行。
我有一个 nx 工作区,我正在尝试将其移动到笑话中。起初我收到一个关于 PointerEvent 未定义的错误。建议的解决方法是执行 Object.defineProperty(window, 'PointerEvent'... 我的工作区有超过 200 个库,因此在每个测试设置文件中添加它是不现实的,因此我创建了一个 npm 包来定义它。我在测试设置中导入它,就像导入 jest-preset-angular 一样。它在我转换的前 15 个库中工作,但最新的库在运行测试时抛出此错误。
我已将此库与我能想到的所有其他库进行了比较,没有任何区别。我完全没有主意了。说我对这项努力感到沮丧是轻描淡写的。希望那里有人有一个大型的 nx 存储库并已经处理了这个问题。似乎我得到的每个答案都假设我选择 nx 只有一个应用程序和一两个库。我无法提供存储库,因为这个错误是如此随机,我不知道如何重现它。je-test-helper 位于 node_modules 中,正如我所说的,它的所有其他相同用法都有效。
我正在使用MVVM Light并使用Message在ViewModels之间进行通信,让ViewModel知道何时可以执行某些操作.我的问题是我注册了一条消息,然后它多次收到它.所以为了防止我的程序多次执行某些事情,我必须创建一个布尔标志来查看它是否已被收到.知道为什么会这样做以及如何阻止它?
有没有一种方法可以让我为每个应用程序使用不同的组件选择器前缀,而不会导致 tslint 抛出异常(即 App1 前缀“一”,App2 前缀“二”?您只能在组件选择器属性中列出一个前缀。我知道我可以从 tslint.json 中将其全部删除,但希望有不同的方法。
我有一个仪表板应用程序,在这里我懒惰地加载小部件(与路线无关)。
我通过定义一个对象来做到这一点{name: string, loadChildren: string}。然后app.module我会做的provideRoutes(...)。
这将导致cli为每个小部件模块创建一个块。
然后在运行时,我将使用SystemJsModuleLoader加载该字符串并获取一个NgModuleRef。
使用,我可以创建一个从模块和调用组件createComponent上ViewContainerRef。
这是该函数:
loadWidget(
name: string,
container: ViewContainerRef,
widget: Widget
): Promise<{ instance: WidgetComponent; personlize?: { comp: any; factory: ComponentFactoryResolver } }> {
if (this.lazyWidgets.hasOwnProperty(name)) {
return this.loader.load(this.lazyWidgets[name]).then((moduleFactory: NgModuleFactory<any>) => {
const entryComponent = (<any>moduleFactory.moduleType).entry;
const moduleRef = moduleFactory.create(this.injector);
const compFactory = moduleRef.componentFactoryResolver.resolveComponentFactory(entryComponent);
const comp = container.createComponent(compFactory);
(<WidgetComponent>comp.instance).widget = widget;
const personalize = (<any>moduleFactory.moduleType).personalize;
if (personalize) {
return {
instance: …Run Code Online (Sandbox Code Playgroud)