You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

205 lines
4.0 KiB

import Vue, { VNode } from "../index";
import { ComponentOptions } from "../options";
class Test extends Vue {
a: number = 0;
testProperties() {
this.$data;
this.$el;
this.$options;
this.$parent;
this.$root;
this.$children;
this.$refs;
this.$slots;
this.$isServer;
this.$ssrContext;
this.$vnode;
}
// test property reification
$el!: HTMLElement | SVGElement;
$refs!: {
vue: Vue,
element: HTMLInputElement,
vues: Vue[],
elements: HTMLInputElement[]
}
testReification() {
this.$refs.vue.$data;
this.$refs.element.value;
this.$refs.vues[0].$data;
this.$refs.elements[0].value;
}
testMethods() {
this.$mount("#app", false);
this.$forceUpdate();
this.$destroy();
this.$set({}, "key", "value");
this.$delete({}, "key");
this.$watch("a", (val: number, oldVal: number) => {}, {
immediate: true,
deep: false
})();
this.$watch(() => this.a, (val: number) => {});
this.$on("", () => {});
this.$once("", () => {});
this.$off("", () => {});
this.$emit("", 1, 2, 3);
this.$nextTick(function() {
this.$nextTick;
});
this.$nextTick().then(() => {});
this.$createElement("div", {}, "message");
}
static testConfig() {
const { config } = this;
config.silent;
config.optionMergeStrategies;
config.devtools;
config.errorHandler = (err, vm) => {
if (vm instanceof Test) {
vm.testProperties();
vm.testMethods();
}
};
config.warnHandler = (msg, vm) => {
if (vm instanceof Test) {
vm.testProperties();
vm.testMethods();
}
};
config.keyCodes = { esc: 27 };
config.ignoredElements = ['foo', /^ion-/];
config.async = false
}
static testMethods() {
this.extend({
data() {
return {
msg: ""
};
}
});
this.nextTick(() => {});
this.nextTick().then(() => {});
this.set({}, "", "");
this.set({}, 1, "");
this.set([true, false, true], 1, true);
this.delete({}, "");
this.delete({}, 1);
this.delete([true, false], 0);
this.directive("", {bind() {}});
this.filter("", (value: number) => value);
this.component("", { data: () => ({}) });
this.component("", { functional: true, render(h) { return h("div", "hello!") } });
this.use;
this.mixin(Test);
this.compile("<div>{{ message }}</div>");
this
.use(() => {
})
.use(() => {
})
.mixin({})
.mixin({});
}
}
const HelloWorldComponent = Vue.extend({
props: ["name"],
data() {
return {
message: "Hello " + this.name,
}
},
computed: {
shouted(): string {
return this.message.toUpperCase();
}
},
methods: {
getMoreExcited() {
this.message += "!";
}
},
watch: {
message(a: string) {
console.log(`Message ${this.message} was changed!`);
}
}
});
const FunctionalHelloWorldComponent = Vue.extend({
functional: true,
props: ["name"],
render(createElement, ctxt) {
return createElement("div", "Hello " + ctxt.props.name)
}
});
const Parent = Vue.extend({
data() {
return { greeting: 'Hello' }
}
});
const Child = Parent.extend({
methods: {
foo() {
console.log(this.greeting.toLowerCase());
}
}
});
const GrandChild = Child.extend({
computed: {
lower(): string {
return this.greeting.toLowerCase();
}
}
});
new GrandChild().lower.toUpperCase();
for (let _ in (new Test()).$options) {
}
declare const options: ComponentOptions<Vue>;
Vue.extend(options);
Vue.component('test-comp', options);
new Vue(options);
// cyclic example
Vue.extend({
props: {
bar: {
type: String
}
},
methods: {
foo() {}
},
mounted () {
this.foo()
},
// manual annotation
render (h): VNode {
const a = this.bar
return h('canvas', {}, [a])
}
})
declare function decorate<VC extends typeof Vue>(v: VC): VC;
@decorate
class Decorated extends Vue {
a = 123;
}
const obj = Vue.observable({ a: 1 })
obj.a++