Vue.js 源码目录设计
2020-12-26 14:29
标签:特性 import return tag 官方文档 boolean his 重要特性 pac 虽然 Vue.js 源码目录设计 标签:特性 import return tag 官方文档 boolean his 重要特性 pac 原文地址:https://www.cnblogs.com/dinance/p/13906585.htmlvue2.x
对TypeScript的支持还不是非常完善,但是从今年即将到来的3.0版本在GitHub上的仓库 vue-next 看,为TS提供更好的官方支持应该也会是一个重要特性,那么,在迎接3.0之前,不妨先来看看目前版本二者的搭配食用方法吧~创建项目
Vue CLI
应该是目前相对比较好的方式,在使用vue create
创建新项目时,对preset
选择Manually select features
选项,之后添加TypeScript
class-style component syntax
处选择Y(本文主要介绍选择Y的情况)Babel
来说,一般情况选择使用,而linter / formatter
的具体选择可根据项目需求,此处不多说明进入项目
package.json
,可以发现vue-class-component
和vue-property-decorator
以及其他ts相关的modules都已被添加,其中:
vue-class-component
可以让你使用class-style语法创建组件,比如以下代码:template>
div>
button @click="decrement">-button>
{{ count }}
button @click="increment">+button>
div>
template>
script lang="ts">
import Vue from ‘vue‘
import Component from ‘vue-class-component‘
// Define the component in class-style
@Component
export default class Counter extends Vue {
// Class properties will be component data
count = 0
// Methods will be component methods
increment() {
this.count++
}
decrement() {
this.count--
}
}
script>
复制代码
vue-property-component
则完全依赖于前者,提供了除@Component
外的其他几种装饰器,比如@Prop
import { Vue, Component, Prop } from ‘vue-property-decorator‘
@Component
export default class YourComponent extends Vue {
@Prop(Number) readonly propA: number | undefined
@Prop({ default: ‘default value‘ }) readonly propB!: string
@Prop([String, Boolean]) readonly propC: string | boolean | undefined
}
复制代码
template>
div class="hello">
h1>{{ msg }}h1>
h1>{{ fullName }}h1>
button @click="reverseStr()">Reversebutton>
div>
template>
script lang="ts">
import { Component, Prop, Vue, Watch } from ‘vue-property-decorator‘;
@Component
export default class HelloWorld extends Vue {
@Prop() private msg!: string;
firstName = "rapt";
lastName = "azure";
mounted() {
console.log(‘mounted‘);
}
// Computed property
get fullName(): string {
return this.firstName + this.lastName;
}
// Method
reverseStr() {
this.firstName = this.firstName.split(‘‘).reverse().join(‘‘);
this.lastName = this.lastName.split(‘‘).reverse().join(‘‘);
}
}
script>
复制代码
interfaces
这样的文件夹,充分利用ts的接口和类来使项目有更好的组织结构,可读性和维护性。另一种选择
template>
div class="hello">
h1>{{ msg }}h1>
h1>{{ test }}h1>
div>
template>
script lang="ts">
import Vue from ‘vue‘;
export default Vue.extend({
name: ‘HelloWorld‘,
props: {
msg: String,
},
data() {
return {
test: "Hello from TS" as string
}
},
methods: {
pressMe(): string {
return this.test + ‘br‘
}
}
});
script>
复制代码
其他的话