私の目標は、データをAngularコンポーネントからサービスに送信し、サービスメソッドを使用して作業することです。例:
export class SomeComponent {
public data: Array<any> = MyData;
public constructor(private myService: MyService) {
this.myService.data = this.data;
}
}
およびサービス:
@Injectable()
export class TablePageService {
public data: Array<any>;
constructor() {
console.log(this.data);
// undefined
}
}
データの取得は未定義です。動作させる方法は?
サービスとコンポーネント間の相互作用の例:
サービス:
_@Injectable()
export class MyService {
myMethod$: Observable<any>;
private myMethodSubject = new Subject<any>();
constructor() {
this.myMethod$ = this.myMethodSubject.asObservable();
}
myMethod(data) {
console.log(data); // I have data! Let's return it so subscribers can use it!
// we can do stuff with data if we want
this.myMethodSubject.next(data);
}
}
_
Component1(送信者):
_export class SomeComponent {
public data: Array<any> = MyData;
public constructor(private myService: MyService) {
this.myService.myMethod(this.data);
}
}
_
Component2(レシーバー):
_export class SomeComponent2 {
public data: Array<any> = MyData;
public constructor(private myService: MyService) {
this.myService.myMethod$.subscribe((data) => {
this.data = data; // And he have data here too!
}
);
}
}
_
説明:
MyService
はdata
を管理しています。必要に応じてdata
で何かをすることもできますが、_Component2
_のままにしておく方が良いでしょう。
基本的に、MyService
は_Component1
_からdata
を受け取り、メソッドmyMethod()
にサブスクライブしている人に送信します。
_Component1
_はdata
にMyService
を送信していますが、それだけです。 _Component2
_はmyMethod()
にサブスクライブされているため、myMethod()
が呼び出されるたびに、_Component2
_はリッスンし、myMethod()
が返すものをすべて取得します。
@SrAxiの応答には、サービスデータをサブスクライブできないため、受信側コンポーネントに小さな問題があります。 Subjectの代わりにBehaviorSubjectの使用を検討してください。それは私のために働いた!
private myMethodSubject = new BehaviorSubject<any>("");