无法从 angular 6 中的共享服务获取数据
unable get data from shared service in angular 6
我正在尝试将 json 数据从一个组件共享到另一个组件(如父组件到子组件)。使用 service.I 在此服务中有两种方法,一种用于 setJsonData,另一种用于 getJson 数据。
服务Class
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class XeproviderdataserviceService {
jsonData = {};
constructor() {
this.jsonData = {};
}
setXeProviderJson(val: object) {
this.jsonData = val;
console.log('setjson Data-', this.jsonData);
}
getXeProviderJson() {
return this.jsonData;
}
}
父组件
export class MainComponent implements OnInit {
active = 1;
constructor(private xeDataService: XeproviderdataserviceService) {
ngOnInit() {
}
selectTab(value, jsonData) {
this.active = value;
this.xeDataService.setXeProviderJson(jsonData);
console.log('getting', this.xeDataService.getXeProviderJson);
}
}
子组件
import { Component, OnInit } from '@angular/core';
import { XeproviderdataserviceService } from '../xeproviderdataservice.service';
@Component({
// tslint:disable-next-line:component-selector
selector: 'xservice-tab-component',
templateUrl: './xeservice.component.html',
styleUrls: ['./xeservice.component.css']
})
export class XeserviceComponent implements OnInit {
constructor( xeDataService: XeproviderdataserviceService) {
console.log('get json Data', xeDataService.getXeProviderJson());
}
ngOnInit() {
}
}
以上代码我可以使用 setJsonData 设置数据 function.when 我尝试使用 getJsonData 方法获取数据时它会变空。
我不知道我做错了什么.....
在浏览器中我可以看到这样
您可以在此过程中使用 Subject,它将为每个事件触发器发出值。非常简单而重要的话题"Subject"
父组件
.html
<button (click)="updateName(yourValue)">Update</button>
.ts file
import { Component, OnInit } from '@angular/core';
import { XeproviderdataserviceService } from '../xeproviderdataservice.service';
export parentComponent implements OnInit {
constructor( xeDataService: XeproviderdataserviceService) {}
ngOnInit(){}
updateName(yourValue) {
this.subjectService.setXeProviderJson(yourValue);
}
在您的 XeproviderdataserviceService 服务中..
import { Observable, Subject } from 'rxjs';
export XeproviderdataserviceService {
subjectName : Subject<any> = new Subject<any>();
observableName$ : Observable<any> = this.subjectName.asObservable();
constructor(){}
setXeProviderJson(name) {
this.subjectName.next(name);
}
}
子组件
import { Component, OnInit } from '@angular/core';
import { XeproviderdataserviceService } from '../xeproviderdataservice.service';
export childComponent implements OnInit {
constructor( xeDataService: XeproviderdataserviceService) {}
ngOnInit(){
this.xeDataService.observableName$.subscribe(value => {
console.log(value);
this.updatedValue = value;
})
}
在您的父组件中,您已将该服务声明为私有对象 private xeDataService: XeproviderdataserviceService
,但在您的子组件中,您已将其声明为 public xeDataService: XeproviderdataserviceService
。它在两个组件中应该相同,然后它将作为服务的单例对象工作,然后您应该获得值。
我正在尝试将 json 数据从一个组件共享到另一个组件(如父组件到子组件)。使用 service.I 在此服务中有两种方法,一种用于 setJsonData,另一种用于 getJson 数据。
服务Class
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class XeproviderdataserviceService {
jsonData = {};
constructor() {
this.jsonData = {};
}
setXeProviderJson(val: object) {
this.jsonData = val;
console.log('setjson Data-', this.jsonData);
}
getXeProviderJson() {
return this.jsonData;
}
}
父组件
export class MainComponent implements OnInit {
active = 1;
constructor(private xeDataService: XeproviderdataserviceService) {
ngOnInit() {
}
selectTab(value, jsonData) {
this.active = value;
this.xeDataService.setXeProviderJson(jsonData);
console.log('getting', this.xeDataService.getXeProviderJson);
}
}
子组件
import { Component, OnInit } from '@angular/core';
import { XeproviderdataserviceService } from '../xeproviderdataservice.service';
@Component({
// tslint:disable-next-line:component-selector
selector: 'xservice-tab-component',
templateUrl: './xeservice.component.html',
styleUrls: ['./xeservice.component.css']
})
export class XeserviceComponent implements OnInit {
constructor( xeDataService: XeproviderdataserviceService) {
console.log('get json Data', xeDataService.getXeProviderJson());
}
ngOnInit() {
}
}
以上代码我可以使用 setJsonData 设置数据 function.when 我尝试使用 getJsonData 方法获取数据时它会变空。 我不知道我做错了什么..... 在浏览器中我可以看到这样
您可以在此过程中使用 Subject,它将为每个事件触发器发出值。非常简单而重要的话题"Subject"
父组件
.html
<button (click)="updateName(yourValue)">Update</button>
.ts file
import { Component, OnInit } from '@angular/core';
import { XeproviderdataserviceService } from '../xeproviderdataservice.service';
export parentComponent implements OnInit {
constructor( xeDataService: XeproviderdataserviceService) {}
ngOnInit(){}
updateName(yourValue) {
this.subjectService.setXeProviderJson(yourValue);
}
在您的 XeproviderdataserviceService 服务中..
import { Observable, Subject } from 'rxjs';
export XeproviderdataserviceService {
subjectName : Subject<any> = new Subject<any>();
observableName$ : Observable<any> = this.subjectName.asObservable();
constructor(){}
setXeProviderJson(name) {
this.subjectName.next(name);
}
}
子组件
import { Component, OnInit } from '@angular/core';
import { XeproviderdataserviceService } from '../xeproviderdataservice.service';
export childComponent implements OnInit {
constructor( xeDataService: XeproviderdataserviceService) {}
ngOnInit(){
this.xeDataService.observableName$.subscribe(value => {
console.log(value);
this.updatedValue = value;
})
}
在您的父组件中,您已将该服务声明为私有对象 private xeDataService: XeproviderdataserviceService
,但在您的子组件中,您已将其声明为 public xeDataService: XeproviderdataserviceService
。它在两个组件中应该相同,然后它将作为服务的单例对象工作,然后您应该获得值。