我为此尝试了很多东西,似乎没有任何帮助 .
What I'm trying to accomplish:
-
用户单击选择组件视图上的按钮
-
事件触发,在选择组件上调用
changePage()
-
这会在服务上调用
changePage()
并传入一个字符串 -
changePage()
在服务中更新observable
-
在主要组件中,创建
subscription
并根据服务中的Observable
更改变量pageName
的值 -
pageName
更新为页面上的 Headers
Service
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs';
@Injectable()
export class PageService{
pageChange$: Subject<String> = new BehaviorSubject("About Me");
constructor(){
}
public changePage(changeTo: String){
console.log(changeTo); // LOGS PROPERLY
this.pageChange$.next(changeTo);
}
}
Selection Component
export class SelectionComponent implements OnInit {
constructor(private _pageService:PageService) { }
ngOnInit() {
}
// Called on button click, passed a string from the button
changePage(changeTo: string){
this._pageService.changePage(changeTo);
}
}
Main Component
import { Component, OnInit } from '@angular/core';
import { PageService } from '../page-service.service';
import { AsyncPipe } from '@angular/common';
@Component({
selector: 'app-main-content',
templateUrl: './main-content.component.html',
styleUrls: ['./main-content.component.css'],
providers: [PageService]
})
export class MainContentComponent implements OnInit {
pageName: String;
constructor(private _pageService: PageService) {
}
ngOnInit() {
this._pageService.pageChange$.subscribe(value => {
console.log(value); // DOES NOT LOG
this.pageName = value;
});
}
Information to update
<h3 class="content-header">{{ pageName }}</h3>
我一直在努力解决这个问题 . 不可否认,我对Angular很新,也许我只是对Observables如何工作感到困惑,但目前它还没有用 .
我在控制台中使用“关于我”获得了一个console.log,但之后没有任何内容 . 没有错误,没有 . h3会说关于我,但不会改变 .
1 回答
在您的主要组件中,我注意到您正在提供这样的PageService
如果您在选择组件中也执行相同操作,则无法获取发出的消息 . 这是由于Angular 's Dependency Injection works. You need to have a Singleton PageService between your Main Component and your Selection Component. If that'的情况,你应该从两个组件中删除
providers: [PageService]
并在你的根模块中提供它 . (在大多数情况下app.module.ts
) .尝试一下,看看你是否不会从MainComponent中的PageComponent获取发出的消息 .
Edit
你可以阅读更多关于DI here.的信息