2017-07-19 2 views
0

Ich bin neu in Angular 2. Ich arbeite an einer E-Commerce-Website und ich habe einige grundlegende Klassen für Benutzer, Artikel, Gebote, etc ... Meine Benutzerklasse hat viele Parameter, einige von ihnen sind:Angular 2 - Run Dienste innerhalb der Klassen

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

der Notification-Klasse, hat nur zwei Parameter wie folgt:

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

ich habe einen Service für die Nutzer und eine für Benachrichtigungen.

Die Situation ist dies: Wenn ein Benutzer eine Benachrichtigung liest, muss ich eine Anfrage an den Server stellen, um den Wert des "Lese-Flags" der Benachrichtigung in meiner Datenbank zu ändern. Um dies zu tun, in meiner Komponente, kann ich:

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

In der vorherigen Zeile Ich stelle mir vor, dass notificationService ist eine Instanz NotificationService, die ein Verfahren namens changeToRead (Meldung: Notification), die die Anforderung ausführt.

Mein Problem dabei ist, dass es scheint Verfahrens ist, und ich möchte eine objektorientierte Lösung wie:

user.notifications[x].changeToRead(); 

Um dies zu tun, muss ich die Methode changeToRead() in der Klasse Mitteilung haben, aber es scheint, dass ich keinen Service in eine Klasse injizieren kann ... Aber selbst wenn ich könnte, möchte ich nicht so viele Instanzen von Diensten wie Benachrichtigungen, die ich habe ...

Ich bin mir nicht sicher, ob ich Bin klar wegen meinem schlechten Englisch, aber ich muss eine Lösung finden, um meine Anfrage objektorientierter zu machen wie ...

Irgendwelche Ideen?

+0

Grund für die Verwendung dieser 'Klasse'. Es sollte mit einem '@ Component' – Aravind

Antwort

0

Sie sollten in Betracht ziehen, Ihre Angular-Anwendung mit den aktuellen Angular-Mustern zu erstellen und keine OOP-Muster einzubringen, die in Angular nicht üblich sind.

Mit dieser sagte, ich war in der Lage zu „injiziert“ einen Dienst in meine Klasse so etwas wie dies mit:

In der Klasse:

constructor(private productService: ProductService) { 

    } 

in dem Komponentencode, der die Klasse verwendet:

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

Dank für Ihre Antwort verziert werden. Ja, ich habe versucht, einen Service zu "injizieren", wie Sie sagen, aber ich scheint nicht "sauber" zu sein. Was meinst du, wenn du "aktuelle Winkelmuster" sagst? Ist die korrekte Art der Programmierung in Angular die Dienstleistung in die Komponente zu injizieren und sie prozedural zu verwenden? Ich meine, ich habe den Weg der Verwendung von OOP gesucht, weil ich dachte, dass es am saubersten ist, aber wenn nicht, werde ich tun wie immer ... – user3368457

+0

Ja, es ist die "richtige" Art der Programmierung in Angular, um Dienste in ein zu injizieren Komponente. Nicht sicher, wie das "prozedural" ist. Der Dienst ist nur ein Singleton-Objekt, und Sie rufen Methoden mithilfe von OOP-Methoden auf. – DeborahK

+0

Ah, perfekt! Nun, ich werde weitermachen wie immer! Vielen Dank @DeborahK – user3368457

Verwandte Themen