Read me
Welcome to suggest and contribute. Message me on github.
Install
npm install -S vue-facing-decorator
Finished
import {
Component,
Ref,
Watch,
Prop,
Inject,
Base,
} from "vue-facing-decorator";
import AnotherComponent from "./AnotherComponent.vue";
class Sup extends Base {
supProperty = "supProperty";
supMethod() {}
get supGetter() {
return "supGetter";
}
}
@Component({
name: "MyComponent",
emits: ["update:modelValue"],
provide: {
provideKey: "provideValue",
},
components: {
AnotherComponent,
},
modifier: (option: any) => {
console.log("generated optoin", option);
option.methods ??= {};
option.methods.method2 = function () {
console.log("method2");
};
return option;
},
})
export default class Comp extends Sup {
@Ref
readonly ref!: HTMLDivElement;
@Prop({
required: true,
default: "default prop",
type: String,
validator(v: string) {
console.log("prop validator", v);
return true;
},
})
readonly prop!: string;
@Prop({
required: true,
type: Number,
})
readonly modelValue!: number;
property = "property";
get getter() {
return "getter";
}
method() {
this.$forceUpdate();
this.property += ">";
this.$emit("update:modelValue", this.modelValue + 1);
}
@Watch("property", {
deep: true,
immediate: true,
flush: "post",
})
propertyWatcher(newv: string, oldv: string) {
console.log("property changed", newv, oldv);
}
@Inject({
default: "defult value",
from: "provideAcientKey",
})
provideAcientKeyAlias!: string;
mounted() {
console.log(
this.ref,
this.getter,
this.property,
this.supProperty,
this.supGetter,
this.prop,
this.provideAcientKeyAlias
);
}
}
is equal to
import { defineComponent} from "vue";
import AnotherComponent from "./AnotherComponent.vue";
export default defineComponent({
name: "MyComponent",
components:{
AnotherComponent
},
emits: ["update:modelValue"],
provide: {
provideKey: "provideValue",
},
inject: {
provideAcientKeyAlias: {
default: "defult value",
from: "provideAcientKey",
},
},
data() {
return {
supProperty: "supProperty",
property: "property",
};
},
methods: {
supMethod() {},
method() {
this.$forceUpdate();
this.$emit("update:modelValue", this.modelValue + 1);
},
method2() {
console.log("method2");
},
},
watch: {
property: function (newv: string, oldv: string) {
console.log("property changed", newv, oldv);
},
},
computed: {
supGetter() {
return "supGetter";
},
getter() {
return "getter";
},
ref() {
this.$refs["ref"];
},
},
props: {
prop: {
required: true,
default: "default prop",
type: String,
validator: function (v: string) {
console.log("prop validator", v);
return true;
} as any,
},
modelValue: { type: Number, required: true },
},
mounted() {
console.log(
this.ref,
this.property,
this.supProperty,
this.getter,
this.supGetter,
this.prop,
(this as any).provideAcientKeyAlias
);
},
});