Javascript 需要帮助从Angular 2中的服务访问变量吗

Javascript 需要帮助从Angular 2中的服务访问变量吗,javascript,html,angular,Javascript,Html,Angular,将用户上一页的URL id传递给我可以在对话框中引用的服务 发行人服务 从'@angular/core'导入{Injectable,EventEmitter}; 从'rxjs'导入{可观察的}; 从“rxjs”导入{BehaviorSubject}; @可注射() 导出类发布服务{ 私有urlidSource=新行为主体(“”); currentUrlid=this.urlidSource.asObservable(); public onChange:EventEmitter=neweven

将用户上一页的URL id传递给我可以在对话框中引用的服务

发行人服务

从'@angular/core'导入{Injectable,EventEmitter};
从'rxjs'导入{可观察的};
从“rxjs”导入{BehaviorSubject};
@可注射()
导出类发布服务{
私有urlidSource=新行为主体(“”);
currentUrlid=this.urlidSource.asObservable();
public onChange:EventEmitter=neweventemitter();
构造函数(){
}
changeUrlid(urlid:string){
this.currentUrlid=of(urlid);
this.onChange.emit(urlid);
}
getUrlid(currentUrlid:string){
返回此.currentUrlid;
}

}
您的get方法不需要参数,因为您在服务中已经有了值

  getUrlid() {
    return this.currentUrlid;
  }
您可以使用检索第二个组件中的值,如下所示

this.issuerService.currentUrlid.subscribe((value: string) => {
         this.urlid = value;
}

您的get方法不需要参数,因为您已经在服务中拥有该值

  getUrlid() {
    return this.currentUrlid;
  }
您可以使用检索第二个组件中的值,如下所示

this.issuerService.currentUrlid.subscribe((value: string) => {
         this.urlid = value;
}
您可以看到这一点,以及它的修改列表:

  • 使用queryPamas获取查询字符串,而不是参数(仪表板组件)

  • 使用ReplaySubject(1)返回最后一个urlId;它没有默认值,只返回上一个值(IssuerService)

  • 从getUrlid获取可观察的内容,并在希望显示url id的组件中订阅它

导出类发布服务{
私有urlidSource=新的ReplaySubject(1);
构造函数(){
}
changeUrlid(urlid:string){
this.urlidSource.next(urlid);
}
getUrlid(){
返回此.urlidSource;
}
}
导出类DashboardComponent实现OnInit{
urlid:string;
建造师(
//专用路由:激活的路由,
专用路由器:路由器,
私人发卡服务:发卡服务,
//公共对话框:MatDialog
) { }
newUrlid(){
//获取URL ID
this.route.queryParams.subscribe((queryParam)=>{
const id=queryParam['id'];
如果(!id){
返回;
}
this.issuerService.changeUrlid(id);
});
}
恩戈尼尼特(){
this.newUrlid();
this.issuerService.getUrlid().subscribe(urlid=>{
this.urlid=urlid;
});
}
}
导出类HelloComponent实现OnInit{
urlid;
建造师(
私人发卡服务:发卡服务
) { }
恩戈尼尼特(){
this.issuerService.getUrlid().subscribe(urlid=>{
this.urlid=urlid;
});
}
}
您可以看到这个,以及它的修改列表:

  • 使用queryPamas获取查询字符串,而不是参数(仪表板组件)

  • 使用ReplaySubject(1)返回最后一个urlId;它没有默认值,只返回上一个值(IssuerService)

  • 从getUrlid获取可观察的内容,并在希望显示url id的组件中订阅它

导出类发布服务{
私有urlidSource=新的ReplaySubject(1);
构造函数(){
}
changeUrlid(urlid:string){
this.urlidSource.next(urlid);
}
getUrlid(){
返回此.urlidSource;
}
}
导出类DashboardComponent实现OnInit{
urlid:string;
建造师(
//专用路由:激活的路由,
专用路由器:路由器,
私人发卡服务:发卡服务,
//公共对话框:MatDialog
) { }
newUrlid(){
//获取URL ID
this.route.queryParams.subscribe((queryParam)=>{
const id=queryParam['id'];
如果(!id){
返回;
}
this.issuerService.changeUrlid(id);
});
}
恩戈尼尼特(){
this.newUrlid();
this.issuerService.getUrlid().subscribe(urlid=>{
this.urlid=urlid;
});
}
}
导出类HelloComponent实现OnInit{
urlid;
建造师(
私人发卡服务:发卡服务
) { }
恩戈尼尼特(){
this.issuerService.getUrlid().subscribe(urlid=>{
this.urlid=urlid;
});
}

}
为什么在这里传递getUrlid()id?如果我要从不同的组件(home.component.ts)访问此服务,您可以使用相同的方法。我将如何显示“2”(urlid中包含的值)。为什么在这里传递getUrlid()id?如果我从不同的组件(home.component.ts)访问此服务,您可以使用相同的方法。我将如何显示“2”(urlid中包含的值);在我的代码中。它不返回一个值,它返回一个可观察的“可观察的{{u isScalar:false,source:BehaviorSubject}”哦,忘记了它是可观察的,检查更新的,对不起,我没用——我还是个新手。我收到以下错误:[ts]属性'asObservable'在类型'Observable'上不存在。@user68288您是否尝试过
this.issuerService.getUrlid().subscribe(urlid=>{this.urlid=urlid;console.log(this.urlid);})
asObservable
是主体的类型不可观察,我想你可以试试
这个.issuerService.currentUrlid.subscribe(…)
或者
这个.issuerService.onChange.asObservable().subscribe(…)
我试过这个,然后放了console.log(这个.issuerService.getUrlid());在我的代码中。它不返回一个值,它返回一个可观察的“可观察的{{u isScalar:false,source:BehaviorSubject}”哦,忘记了它是可观察的,检查更新的,对不起,我没用——我还是个新手。我收到以下错误:[ts]属性'asObservable'在类型'Observable'上不存在。@user68288您是否尝试过
this.issuerService.getUrlid().subscribe(urlid=>{this.urlid=urlid;console.log(this.urlid);})
asObservable
是主体的类型不可观察,我认为您可以尝试
this.issuerService.currentUrlid.subscribe(…)
this.issuerService.onChange.asObservable().subscribe(…)