2017-07-19 4 views
0

私は角2を使い慣れています。私は電子商取引サイトで作業しており、ユーザー、アイテム、入札などの基本クラスを設計しました。多くのパラメータは、それらのいくつかは、次のように角2 - クラス内でサービスを実行

export class User { 
    id:    number; 
    name:   string; 
    email:   string; 
    ... 
    notifications: Notification[]; 
} 

通知クラスは、2つのパラメータのみを持っています

export class Notification { 
    notification:  string; 
    read:    boolean; 
} 

私は1つのユーザーのためのサービスと通知のための1つを持っています。

状況は次のとおりです。ユーザーが通知を読むと、データベースの通知の「読み取りフラグ」の値を変更するようにサーバーに要求する必要があります。これを行うには、私のコンポーネントでは、私が行うことができます。

this.notificationService.changeToRead(user.notifications[x]).subscribe(...); 

を前の行では、私はnotificationServiceがcha​​ngeToReadと呼ばれる方法があるNotificationServiceのインスタンスであることを想像:要求を実行する(通知の通知が)。

これで私の問題は、それが手続きには思わだし、私のような、よりオブジェクト指向のソリューションたいということです、

user.notifications[x].changeToRead(); 

これを行うには、私はクラスの通知のメソッドchangeToRead()を持っている必要がありますが、クラスにサービスを注入することはできないと思われます...しかし、可能な場合であっても、私はあなたが持っている通知のようなサービスのインスタンスを望んでいません...

私は私の貧しい英語のために明確ですが、私は私の要求をもっとオブジェクト指向にするための解決策を見つける必要があります...

アイデアはありますか?

+0

この 'class'を使用する理由。あなたの答えに感謝して、 '@ Component' – Aravind

答えて

0

現在の角度パターンを使用してAngularアプリケーションを構築し、Angularで一般的に使用されていないOOPパターンは使用しないことをお勧めします。クラスを使用するコンポーネントのコードで

constructor(private productService: ProductService) { 

    } 

:クラスでは

:それと

が言った、私はこのようなものを使用して、私のクラスにサービスを「注入」することができました

ngOnInit(): void { 
    let product = new IProduct(this.productService); 
} 
+0

に感謝します。はい、私はあなたが言うようにサービスを "注入"しようとしましたが、私は "クリーン"ではないようです。 「現在の角度パターン」とはどういう意味ですか?コンポーネントでサービスを注入し、手続き的な方法で使用するAngularでプログラミングする正しい方法はありますか?私はOOPを使う方法を探していました。なぜなら、私はそれがきれいだと思ったからです。もしそうでなければ、私はいつもと同じようにします... – user3368457

+0

はい、Angularのプログラミングの "正しい"方法は、成分。それがどのように "手続き的"であるか分かりません。このサービスは単なるシングルトンオブジェクトで、OOPテクニックを使用してそのメソッドを呼び出します。 – DeborahK

+0

ああ、完璧!まあ、私はこれまでどおりに続けます!ありがとう@DeborahK – user3368457

関連する問題