我遇到主题错误的问题。我正在使用 Angular 7 版本。这是我的测试:landing.component.spec.ts
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LandingComponent } from './landing.component';
import { PegasPanelComponent } from '../pegas-panel/pegas-panel.component';
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TranslateServiceStub } from 'src/app/app-tests.spec';
import { RouterModule } from '@angular/router';
describe('LandingComponent', () => {
let component: LandingComponent;
let fixture: ComponentFixture<LandingComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [LandingComponent, PegasPanelComponent, ],
imports: [RouterModule, TranslateModule],
providers: [{
provide: TranslateService,
useClass: TranslateServiceStub
}]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(LandingComponent);
component …Run Code Online (Sandbox Code Playgroud) 我有 3 个对象: - 第一个组件 - 连接服务 - 第二个组件
第一个组件在折叠/展开时应通过服务展开/折叠第二个组件。
在服务中,我有函数toggle(),它应该只更改布尔isOpen的布尔变量。在它旁边我还有其他函数 getIsOpen() ,其返回类型为 Observable。代码如下所示:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/internal/Observable';
import { of } from 'rxjs/internal/observable/of';
@Injectable()
export class ConnectService {
public isOpen = false;
public toggle(): void {
this.isOpen = !this.isOpen;
console.log('Im inside toggle');
}
public getIsOpen(): Observable<boolean>{
console.log('Im inside getIsOpen');
return of(this.isOpen);
}
}
Run Code Online (Sandbox Code Playgroud)
在第二个组件中,我尝试订阅:
public ngOnInit(): void {
this.connectionService.getIsOpen().subscribe(x => this.isFirstComponentExpanded = x);
}
Run Code Online (Sandbox Code Playgroud)
但唯一的效果只是在页面加载后,单击后,第二个组件没有折叠或展开。如何在没有事件发射器的情况下监听服务内部的每个更改(我需要避免那里的任何事件发射器,只有可观察值、订阅和主题)。