Angular 7 单例服务在两个组件之间进行通信
Angular 7 Singleton Service To Communicate between two components
我有两个组件和一个服务。我想使用该服务来存储一个共同的价值。 StripeComponent
在服务中设置值。我收到以下错误:
Cannot read property 'setAddress' of undefined
这是我的组件:
import { Component, ViewChild, OnInit } from '@angular/core'
import { NgForm } from '@angular/forms'
import { Address } from '../_models/address'
import { Observable } from 'rxjs';
import { ConfigService } from '../_services/config.service';
declare var Stripe;
@Component({
selector: 'app-stripe',
templateUrl: './stripe.component.html',
styleUrls: ['./stripe.component.css'],
providers: [ConfigService]
})
export class StripeComponent implements OnInit {
public address =
new Address(
{
name:"",
address_city: "",
address_line1: "",
address_line2: "",
address_state: "",
address_zip: "",
address_country: ""
}
)
configService: ConfigService
constructor() {
}
ngOnInit(){
// create observable address$
this.address$.subscribe( (address: Address) => {
console.log(address); }) ;
this.configService.setAddress(this.address); <-- error here
}
}
这是我的服务:
import { Injectable } from '@angular/core'
import { Address }from '../_models/address';
@Injectable({
providedIn: 'root'
})
export class ConfigService {
constructor() { }
private config : Address;
// set the address from stripe component
setAddress(value) {
this.config = value;
}
public getAddress() {
return this.config;
}
}
您需要将 ConfigService
注入 StripeComponent
的构造函数,例如
export class StripeComponent implements OnInit {
constructor(private configService: ConfigService) {}
}
当您将 ConfigService 声明为 "injectable" (@Injectable
) 时,您必须 inject构造函数:
constructor(private configService: ConfigService) {}
我有两个组件和一个服务。我想使用该服务来存储一个共同的价值。 StripeComponent
在服务中设置值。我收到以下错误:
Cannot read property 'setAddress' of undefined
这是我的组件:
import { Component, ViewChild, OnInit } from '@angular/core'
import { NgForm } from '@angular/forms'
import { Address } from '../_models/address'
import { Observable } from 'rxjs';
import { ConfigService } from '../_services/config.service';
declare var Stripe;
@Component({
selector: 'app-stripe',
templateUrl: './stripe.component.html',
styleUrls: ['./stripe.component.css'],
providers: [ConfigService]
})
export class StripeComponent implements OnInit {
public address =
new Address(
{
name:"",
address_city: "",
address_line1: "",
address_line2: "",
address_state: "",
address_zip: "",
address_country: ""
}
)
configService: ConfigService
constructor() {
}
ngOnInit(){
// create observable address$
this.address$.subscribe( (address: Address) => {
console.log(address); }) ;
this.configService.setAddress(this.address); <-- error here
}
}
这是我的服务:
import { Injectable } from '@angular/core'
import { Address }from '../_models/address';
@Injectable({
providedIn: 'root'
})
export class ConfigService {
constructor() { }
private config : Address;
// set the address from stripe component
setAddress(value) {
this.config = value;
}
public getAddress() {
return this.config;
}
}
您需要将 ConfigService
注入 StripeComponent
的构造函数,例如
export class StripeComponent implements OnInit {
constructor(private configService: ConfigService) {}
}
当您将 ConfigService 声明为 "injectable" (@Injectable
) 时,您必须 inject构造函数:
constructor(private configService: ConfigService) {}