我想使用服务获取有关应用支持的当前硬币的信息。
因此我创建了Service:CoinsService
import { Injectable } from '@angular/core';
const coins = {
"btc":"bitcoin",
"ltc":"litecoin"
};
@Injectable()
export class CoinsService {
getCoins(){
return coins;
}
getSpecificCoin(coinShortcut: string) {
return coins[coinShortcut];
}
}
我的用户类如下所示:
import { CoinsService } from './coins.service';
export class User {
constructor(public id: number, public balance: number, public coinsService: CoinsService) {
console.log(coinsService.getCoins());
}
}
在服务之前,如果我想创建一个用户,我就是这样做的: 让userA =新用户('1','200');
现在有了服务,我需要在创建对象时传入coinService: 让userA =新用户('1','200',coinService)
为了完整性,我还发布了app.component.ts:
import { Component } from '@angular/core';
import { User } from './user';
import { CoinsService } from './coins.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [CoinsService]
})
export class AppComponent {
title = 'app';
constructor(private coinsService: CoinsService){
let userA = new User(1, 200, coinsService);
}
}
是否有其他选项可以在没有用户类的情况下使用该服务 “将它传递给”实际需要它的组件?
我想创建用户,而不是每次为每个用户明确告诉它需要CoinsService。
创建的每个用户都可以访问它,这应该是标准。
此外,该服务应该能够在App.Component下面的每个组件中使用。 这就是我在提供者数组中输入CoinssService的原因。
感谢任何帮助。
答案 0 :(得分:2)
您可以制作方法static
并从任何地方调用
@Injectable()
export class CoinsService {
static getCoins(){
return coins;
}
getSpecificCoin(coinShortcut: string) {
return coins[coinShortcut];
}
}
import { CoinsService } from './coins.service';
export class User {
constructor(public id: number, public balance: number) {
console.log(CoinsService.getCoins());
}
}
使用静态属性时要小心,它们就像一个全局/共享属性。如果更改静态属性,它将在该类的所有实例中更改。
答案 1 :(得分:0)
不要传递服务本身,传递url或方法来调用coinService,例如“dollarUrl”“euroUrl”,它可以在你的URL或函数调用中使用。 'this.coinService。' + coinMethod +'(params)......
如果你需要为每个用户使用coinService,那么在你的userService构造函数中使用coinService并从这里调用它。