我试图创建一个服务来共享两个组件之间的数据。我将该服务注入到根模块中,以便通过在根模块提供程序中执行DI来在整个应用程序中访问该服务。我的代码看起来大致如此。Angular 4 Singleton Services
服务
@Injectable(){
export class ForumService{
forum: any;
setForum(object){
this.forum = object;
}
getForum(){
return this.forum;
}
}
根模块
.......
import { ForumService } from 'forumservice';
.......
@NgModule({
declarations: [.....],
imports: [.....],
providers: [....., ForumService],
bootstrap: [AppComponent]
})
export class AppModule{}
部件的一个
//A bunch of import statements
import { ForumService } from 'forumservice'; //Without this Angular throws a compilation error
@Component({
selector: 'app-general-discussion',
templateUrl: './general-discussion.component.html',
styleUrls: ['./general-discussion.component.css'],
providers: [GeneralDiscussionService] //Not injecting ForumService again
})
export class GeneralDiscussionComponent implements OnInit{
constructor(private forumService: ForumService){}
ngOnInit(){
helperFunction();
}
helperFunction(){
//Get data from backend and set it to the ForumService
this.forumService.forum = data;
console.log(this.forumService.forum); //prints the data, not undefined
}
}
组件两个
//A bunch of import statements
import { ForumService } from 'forumservice'; //Without this Angular throws a compilation error
@Component({
selector: 'app-forum',
templateUrl: './forum.component.html',
styleUrls: ['./forum.component.css'],
providers: []
})
export class ForumComponent implements OnInit {
forumData: any;
constructor(private forumService: ForumService){}
ngOnInit(){
this.forumData = this.forumService.forum; // returns undefined
}
}
有一次,我从组件之间导航,组件两个我期待“这是一个字符串”。但我得到undefined
。是否因为组件中的导入语句?如果我删除,我看到一个编译错误说没有找到ForumService
。
我很确定这是一个计时问题,在设置之前读取值。尝试在构造函数中设置而不是'ngOnInit'。我的建议是使用'BehaviorSubject'来解决这种问题,而不是一个公正的领域。 –