2017-12-26 8 views
1

Zum Beispiel habe ich einige Funktionen fooA(), fooB() ... die in vielen Komponenten verwendet werden.Wann müssen wir Service in Angular erstellen?

Sollte ich diese Methoden in eine Serviceklasse einbinden und sie injizieren oder einfach eine Klasse mit diesen statischen Funktionen exportieren?

Wrap in Service:

... 
@Injectable() 
export class SampleService { 
    fooA() {...} 

    fooB() {...} 
} 

@Component({ 
    ... 
    providers: [SampleService] 
}) 
export class SampleComponent { 
    constructor(private sampleService: SampleService) {...} 

    method() { 
     this.sampleService.fooA(); 
    } 
} 

einfach eine Klasse exportieren:

export class Utils { 
    static fooA() {...} 

    static fooB() {...} 
} 

@Component({...}) 
export class SampleComponent { 
    method() { 
     Utils.fooA(); 
    } 
} 

Antwort

1

Wenn Sie Methoden, die wiederverwendet werden, sollten Sie eine shared service erstellen. Oder erstellen Sie eine Basiskomponente mit diesen Methoden und erweitern Sie Ihre Komponente von base component.

+0

Bitte beachten Sie mein aktualisierten Code-Snippet. Entschuldigung, ich habe meine Frage nicht klar beschrieben. – Ran

1

Sie können einen eckigen Dienst im Allgemeinen erstellen, um Funktionen zwischen Komponenten zu teilen, die nicht unbedingt mit einer Eltern-Kind-Beziehung oder gleichgeordneten Komponenten übereinstimmen müssen. Auf diese Weise können Sie die gewünschte Funktionalität in einem Service besser kapseln und in den Komponentenkonstruktor einfügen, in dem Sie sie verwenden möchten.

Zum Beispiel, wenn Sie eine Async-Kommunikation erstellen möchten, Daten zwischen zwei Komponenten zu teilen, können Sie einen Dienst mit RxJS Bibliothek erstellen und lassen Komponente Nachrichten abonnieren, die sie erhalten möchten, oder erstellen Sie unterliegen senden Daten zu anderen Komponenten.

Sie können hier über einige Beispiele lesen:

angular component interaction

ways-to-communicate-between-angular-components

Für Ihr Beispiel anstelle des Kopierens der Funktionalität von fooA() und fooB() in jeder Komponente, für besseres Design und Code-Kapselung, Sie können einen eckigen Service mit der Injectable decorator erstellen und diesen Service in jede Komponente einfügen, in der Sie diese Funktionen aufrufen müssen.

Wenn Sie diese Funktionen exportieren, stehen sie für die Verwendung in jeder Komponente zur Verfügung, statt dessen können Sie sie nur durch Hinzufügen eines Dienstes verwenden.

+0

Bitte beachten Sie mein aktuelles Code-Snippet. Entschuldigung, ich habe meine Frage nicht klar beschrieben. – Ran

1

Sie sollten statische Funktionen verwenden, wenn die Logik für diese Funktionen ziemlich global ist und sich nicht über die Anwendung hinweg ändert.

Das Erstellen eines Dienstes mit nicht statischen Funktionen eignet sich, wenn wir die Funktionen innerhalb der bestimmten Klasse verwenden möchten, d. H. Private Funktionen oder wenn eine andere Klasse sie benötigt, d. H. Öffentliche Funktion. Wenn eine Klasse die Implementierung der Superklasse überschreiben will (eine Klasse, von der sie erbt), definieren wir die Funktion als nicht-statisches Member.

Wenn Ihre Logik global ist und sich nicht über die Anwendung hinweg ändert, verwenden Sie sie als statische Funktionen, andernfalls machen Sie sie zu nicht statischen Elementen.

Verwandte Themen