2017-11-15 6 views
0

サービスで、アプリケーションがサポートしている現在のコインに関する情報を取得したいと考えています。 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()); 
    } 
} 

は、そのため私は、サービスを作成しましたlet userA = new User( '1'、 '200');私は、オブジェクトの作成時にcoinServiceに渡す必要がサービスを今すぐ

: 私もapp.componentを投稿する全体性のためにユーザAが=新しいユーザー(「1」、「200」、coinService)

てみましょう。 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); 
    } 
} 

は、実際にそれを必要とするコンポーネントに「それを渡す」 ずにUserクラスでサービスを利用できるようにするため、他のオプションはありますか?

CoinsServiceが必要なユーザーごとに毎回明示的に通知することなくユーザーを作成したいと考えています。

作成されるすべてのユーザーがアクセスできるのは、標準である必要があります。

また、サービスは、App.Component以下のすべてのコンポーネントで使用できる必要があります。 そのため、私はプロバイダ配列にCoinssServiceを入力しました。

何か助けていただければ幸いです。

答えて

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()); 
    } 
} 

からそれを呼び出すことができます、彼らはグローバル/共有財産のようなものです。静的プロパティを変更すると、そのクラスのすべてのインスタンスで変更されます。

さらに詳しい情報:What does the 'static' keyword do in a class?

0

URLまたはあなたのURLや関数呼び出しで使用可能な「dollarUrl」「euroUrl」のようなcoinServiceに呼び出すメソッドを渡し、サービス自体を渡さないでください。 「this.coinService」 + coinMethod + '(params)...

すべてのユーザーにcoinServiceが必要な場合は、userServiceコンストラクタでcoinServiceを使用し、ここから呼び出してください。

関連する問題