组件

本模板没有使用单文件组件,每个组件由四个文件组成,这是因为目前编辑器对 *.vue 文件的支持性不是很强。

组件结构

├── hello.scss
├── hello.ts        
├── hello.vue
└── index.ts

vue 文件

可以看到,组件模板是使用 vue 文件的,而不是使用 html, 这是因为可以借助 vue-loader 将单文件组件的优势融入进来。

<!-- vue 文件 -->
<template>
    <div>
        <h1>Hello {{name}}</h1>
    </div>
</template>
<style src="./hello.scss" lang="scss" scoped></style>

ts 文件

使用 typescript 编写组件,我们使用了 vue-property-decorator, 具体使用方式,请参考其文档。

import Vue from 'components/base'
import { Component, Prop } from 'vue-property-decorator'
import template from './hello.vue'

@Component({
    name: 'tag-hello',
    mixins: [template] // 使用 mixins 将 vue 文件的功能混合进来
})
export default class Hello extends Vue {
    // 定义 prop
    @Prop({ default: 'World' })
    name: string

    // computed
    get fullname () {
        return `hello, ${this.name}`
    }

    // method
    say () {
        console.log(this.fullname)
    }
}

注意:vue-property-decorator 的 Component 装饰器来自 vue-class-component, 需要看一下该文档

样式

请参考 样式 一节。

index.ts

这个文件是组件的入口文件,方便其他组件导入。

export * from './hello.ts'

为什么不直接将 hello.ts 命名为 index.ts 呢?这是因为考虑到编辑器打开文件的时候显示文件名的问题,不然显示 index.ts 你都不知道这个是哪个组件。如果不想要 index.ts, 你可以修改 cli 的组件模板。

引入其他组件或模块

引入其他组件或模块,默认以 src 目录开始查找的。

// 引入 'src/components/tags/hello'
import Hello from 'components/tags/hello'

如果你使用 vscode 开发的话,建议设置以下选项:

{
    "editor.quickSuggestions": {
        "other": true,
        "comments": false,
        "strings": true
    }
}

这样你 import 的时候就有路径提示。

results matching ""

    No results matching ""