velay

vue page and fragments

Usage no npm install needed!

<script type="module">
  import velay from 'https://cdn.skypack.dev/velay';
</script>

README

Velay

使用 TypeScript 以 OOP 的方式写 Vue 和 Vuex store.

Requirements

// tsconfig.json

{
    "compilerOptions": {
        ...
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        ...
    }
}

Usage

Write Store Class

// my-store.ts
import { Injectable, State, StoreService } from 'velay';

export class MyStoreService extends StoreService {
    @State
    count: number = 0;

    @State
    title: string = 'hello, velay';

    @State
    list: { name: string; count: number }[] = [{ name: 'velay1', count: 1 }, { name: 'velay2', count: 2 }];

    changeTitle(title: string) {
        this.title = title;
    }

    addCount() {
        this.count = this.count + 1;
    }
}

Write Component

// my-component.vue
<template>
    <div>
        <h2>{{ store.title }}{{ store.count }}</h2>
        <ul>
            <li v-for="(item, index) in store.list" :key="index">
                <div>{{ item.name }}-{{ item.count }}</div>
            </li>
        </ul>
        <button @click="store.changeTitle('new hello')">Change title</button>
        <button @click="store.addCount">Add count</button>
    </div>
</template>
<script lang="ts">
import { Vue, Component } from 'velay';
import { MyStoreService } from './my-store';

@Component({})
export default class MyComponent extends Vue {
    constructor(private readonly store: MyStoreService) {
        super();
    }

    mounted() {
        console.log('store', this.store);
    }
}
</script>

More

Debug

开启 debug

Velay.config.debug = true;

Vetur

开启模板语法检查,配合 velay 获得更佳的强类型校验

{
    "vetur.experimental.templateInterpolationService": true
}

Augmenting Vue Types

https://vuejs.org/v2/guide/typescript.html#Augmenting-Types-for-Use-with-Plugins