一、模板定义
import Vue from 'vue'
import Component from 'vue-class-component'
// HelloWorld class will be a Vue component
@Component
export default class HelloWorld extends Vue {}
二、data数据
import Vue from 'vue'
import Component from 'vue-class-component'
@Component
export default class HelloWorld extends Vue {
// 请避免使用undefined作为初始值,class属性不具有反应性(检测能力)
notReativeMsg = undefined; // will not be reactive value
// 可以使用null、data hook形式
reativeMsg = null; // will be reactive value
message = 'hello world'
data(){
return {
msg: '你好', // data hook
}
}
}
三、methods方法
import { CreateElement } from 'vue'
import { Component, Vue } from 'vue-property-decorator'
// import Vue from 'vue'
// import Component from 'vue-class-component'
@Component
export default class HelloWorld extends Vue {
count = 0
// 组件methods可以定义为类原型方法
private subFn(){
this.count--
this.obj.count--
}
data(){
return {
// 私有方法封装
obj:{
count: 0,
addFn:()=>{
this.count++
this.obj.count++
}
}
}
}
private render(h: CreateElement) {
return (
<div class="main">
<h1>{this.count}</h1>
<h1>{this.obj.count}</h1>
<a-button onclick={this.obj.addFn}>减一</a-button>
<a-button onclick={this.subFn}>加一</a-button>
</div>
)
}
}
三、computed计算属性
可以将计算属性声明为类属性 getter / setter
@Component
export default class HelloWorld extends Vue {
firstName = 'Hello'
lastName = ',world!'
get name(){
return this.firstName + this.lastName
}
set name(value){
const splitted = value.split(' ')
this.firstName = splitted[0]
this.lastName = splitted[1] || ''
}
}
四、hooks钩子
// data,render和所有的Vue生命周期钩子,可直接声明为类原型的方法,但你不能调用它们的实例本身。声明自定义方法时,应避免使用这些保留名称。
@Component
export default class HelloWorld extends Vue {
beforeCreate(){}
created(){}
beforeMounte(){}
mounted(){}
data(){}
render(){}
}
五、@Component其它配置项
@Component({
componets:{},
......
})
六、props传递
// 定义props
const GreetingProps = Vue.extend({
props: {
name: String
}
})
// 类组件中使用props
@Component
export defalut class HelloWorld extends GreetingProps{}
// 如果您要扩展一个超类组件或mixin,请使用mixins将定义的prop与它们组合
@Component
export default class HelloWorld extends mixins(GreetingProps, Super) {
get message(): string {
// this.name will be typed
return 'Hello, ' + this.name
}
}
点击跳转至官方网址