import "reflect-metadata";
import Vue from "vue";
import Component from "vue-class-component";
import VueTypeScriptInject, { injectable, inject } from "vue-typescript-inject";
Vue.use(VueTypeScriptInject);
@injectable()
class ServiceA {
public num = 0;
public increase() {
this.num += 1;
}
}
@injectable()
class ServiceB {
constructor(private readonly _serviceA: ServiceA) {}
public get str() {
return "" + this._serviceA.num;
}
}
@Component({
template: `
<div>
<span>{{ getNum() }}</span>
<button @click="increase()">Increase</button>
</div>
`,
providers: [ServiceA, ServiceB]
})
class ComponentA extends Vue {
@inject() private readonly _serviceA!: ServiceA;
@inject(ServiceB) private readonly _serviceB!: ServiceB;
public increase() {
this._serviceA.increase();
}
public getNum() {
return this._serviceA.num;
}
public getStr() {
return this._serviceB.str;
}
}