Wie kann ich eine Methode zwischen Komponenten in Vue.js teilen?

8

Sehen Sie sich diese einfache Warenkorb-Demo an:

Zypern

Ein Benutzer kann ein Gemüse und eine Frucht auswählen und es wird in das Warenkorb-Array hinzugefügt. Die Funktion, die ein Obst / Gemüse hinzufügt, ist sehr ähnlich, und ich möchte es zu einer Funktion kombinieren, die über beide Komponenten hinweg geteilt werden kann.

%Vor%

Wie kann ich es so machen, dass ich diese Methode ändern und global anwenden kann? Ich benutze den Vue Router mit diesem Projekt übrigens, danke für jede Hilfe!

    
Mike 27.01.2016, 18:21
quelle

3 Antworten

14

Option 1

Ein Ansatz für die gemeinsame Nutzung Ihrer Methode über mehrere Komponenten hinweg ist die Verwendung eines Mixins. Hier ist ein cartMixin , das eine selectProduct Methode enthält:

%Vor%

Sie können dies in jeder Komponente wie folgt referenzieren:

%Vor%

... und verwende es dann in deinen Vorlagen wie folgt:

%Vor%

Hier ist eine Abzweigung von Ihrem Plunker .

Option 2

Nachdem Sie darüber nachgedacht haben, können Sie auch eine Basis-Komponente Product erstellen und diese erweitern, um Ihre Komponenten Fruit und Vegetable zu erstellen. Sie würden dann Ihre allgemeine Funktionalität in die Basiskomponente einfügen.

%Vor%

Hier ist ein Plunker mit diesem Ansatz .

Da Ihre Obst- und Gemüseschablonen so ähnlich sind, könnten Sie diese Idee noch weiter verfolgen und eine gemeinsame Vorlage aus der Basiskomponente verwenden.

    
Peter 27.01.2016 19:48
quelle
7

Ich fand diese Technik einfacher / befriedigender, da ich die Komposition der Vererbung vorziehe:

src / shared.js

%Vor%

src / Ihre Komponente.vue

%Vor%

Dies wird auch das Schreiben vue-agnostischer Tests erleichtern.

  

HINWEIS: Wenn Sie foo zum Ausführen in vue-scope benötigen, ersetzen Sie this.foo = shared.foo durch this.foo = shared.foo.bind(this)

    
coderofsalvation 08.03.2017 09:28
quelle
2

Sie können die Methode in Ihre Root-Vue-Instanz einfügen und dann ein Ereignis von der untergeordneten Instanz senden, wenn ein Gemüse ausgewählt wird oder wenn ein Obst ausgewählt wird. Ereignisse suchen nach einem Handler für ihre Elternkomponente, und wenn sie keinen Ereignishandler finden, gehen sie weiter in die Kette, bis sie es tun. Also auf Ihrer Root-Instanz:

%Vor%

Dann in der Kind-Instanz:

%Vor%     
Jeff 27.01.2016 19:15
quelle

Tags und Links