Angular 角度2:通过服务进行数据传输

Angular 角度2:通过服务进行数据传输,angular,angular-services,Angular,Angular Services,我有一个角度服务,它有两个字段,即“itemName”和“quantity” 从我的组件EditentryComponent调用服务方法setItem() 从第二个分量中,我尝试得到第一个分量设置的值,如下所示- import { Component, OnInit } from '@angular/core'; import { NetworkService } from './../services/network.service'; @Component({ selector: 'a

我有一个角度服务,它有两个字段,即“itemName”和“quantity”

从我的组件EditentryComponent调用服务方法setItem()

从第二个分量中,我尝试得到第一个分量设置的值,如下所示-

import { Component, OnInit } from '@angular/core';
import { NetworkService } from './../services/network.service';

@Component({
  selector: 'app-edit-receipt-component',
  templateUrl: './edit-receipt-component.component.html',
  styleUrls: ['./edit-receipt-component.component.css'],
  providers : [NetworkService]

})
export class EditReceiptComponentComponent implements OnInit {

constructor(private networkservice : NetworkService) { 
}

ngOnInit() {
  console.log("Item name = "+this.networkservice.itemName);
}

}

但是我得到了第二个组件的输出“itemname=undefined”。哪里出了问题?

通过将服务的两个实例包含在每个组件的提供程序中,您正在创建两个独立的实例

providers: [NetworkService]

您需要使用该服务的单例实例,并且仅在app.module中初始化该服务。因此,请尝试从组件的提供者中删除服务

您有两个服务实例。 每个组件一个。您需要在更高级别(例如在模块或父组件中)声明NetworkService


有关更多信息,请参阅:

若要拥有singleton服务,必须在模块级别声明它,并将其从组件提供程序声明中删除。在您的例子中,它是由Angular as服务和本地范围初始化的

谢谢你的回答。我从我的单个组件中删除了提供者,并将其放在app.module.ts的提供者中。成功了!!!
import { Component, OnInit } from '@angular/core';
import { NetworkService } from './../services/network.service';

@Component({
  selector: 'app-edit-receipt-component',
  templateUrl: './edit-receipt-component.component.html',
  styleUrls: ['./edit-receipt-component.component.css'],
  providers : [NetworkService]

})
export class EditReceiptComponentComponent implements OnInit {

constructor(private networkservice : NetworkService) { 
}

ngOnInit() {
  console.log("Item name = "+this.networkservice.itemName);
}

}
providers: [NetworkService]