# Vue GWT and Widgets

For easy backward compatibility it's possible to wrap any Vue GWT Component in a GWT Widget. For this you need to use VueGwtWidget.

# Adding the dependency

VueGwtWidget is in it's own Maven module. If you want to use it, add this Maven Dependency to your pom.xml:

<dependency>
	<groupId>com.axellience</groupId>
	<artifactId>vue-gwt-gwt2</artifactId>
	<version>${vue-gwt.version}</version>
</dependency>

And this in your gwt.xml:

<inherits name='com.axellience.vuegwt.GWT2'/>

# Instantiating a DemoComponent

Let's instantiate a DemoComponent with VueGwtWidget:

GwtIndex.html

<div id="childComponentAttachPoint"></div>

RootGwtApp.java

public class RootGwtApp implements EntryPoint {
    public void onModuleLoad() {
        // Create a VueGwtPanel, it's a regular GWT Widget and can be attached to any GWT Widget
        VueGwtWidget<DemoComponent> vueGwtWidget = new VueGwtWidget<>(DemoComponent.class);
        
        // Attach it to inside our DOM element
        RootPanel.get("childComponentAttachPoint").add(vueGwtWidget);
    }
}

# Accessing our Vue Instance

It's even possible to interact with our instantiated Vue.

Let's say our DemoComponent has a method increaseCounter(). We can do:

VueGwtWidget<DemoComponent> vueGwtWidget = new VueGwtWidget<>(DemoComponent.class);
RootPanel.get("childComponentAttachPoint").add(vueGwtWidget);

vueGwtWidget.getComponent().increaseCounter();

# Cleaning Up

If you don't need your VueGwtWidget anymore, you can destroy it's Vue instance by calling:

vueGwtWidget.getComponent().vue().$destroy();