vue-property-decorator组件依赖于vue-class-components
@Component
这个属性是写组件的核心,他一般作为装饰器植入我们所写的组件class内
而他也可以通过设置参数来讲一些额外的属性注入class内
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import Button from './components/Button.vue'
@Component({
components: {
Button
},
data(){
return{
i:66
};
},
computed:{
aaa:{
get(){
return this.i*1000;
},
set(val){
this.i=val/10;
}
}
},
watch: {
aaa(){
console.log(66666666666666);
}
},
methods:{
gogo(){
this.aaa=50;
}
}
})
export default class App extends Vue {
}
</script>
由此可以通过@Component引入其他组件,也可以在其内部设定其他属性,所有的组件信息都可以在这里设置(methods,props,watch等等)
@Emit 设置触发回调函数
<script lang="ts">
import {Vue, Component, Emit} from 'vue-property-decorator';
@Component
export default class Test extends Vue{
mounted(){
this.$on('gogo', function(n) {//监听回调函数
console.log(n)
})
this.gogo('world');
}
@Emit()
gogo(n: string){
console.log('hello');
}
}
</script>
@Wacth watch监听
<script lang="ts">
import {Vue, Component, Watch} from 'vue-property-decorator';
@Component
export default class Test extends Vue{
@Watch('gogo')
onchangeValue(newVal: string, oldVal: string){
//当gogo发生变化时,触发该函数
}
@Watch('gogo2', {immediate: true, deep: true})
onChangeValue(newVal: Person, oldVal: Person){
//参数immediate是判断是否初始化执行 deep判断是否会递归执行
}
}
</script>
@Prop 注册父组件传递的参数
<script lang="ts">
import {Vue, Component, Prop} from 'vue-property-decorator';
@Component
export default class Test extends Vue{
@Prop(Number) propA!: number;//在ts里,?代表可能为undefined,相对的!代表参数不能为空或者undefined
@Prop({default: 'default value'}) propB!: string;
@propC([String, Boolean]) propC: string | boolean;
}
</script>
@Model 自定义v-model对应的值
详细查看model
import { Vue, Component, Model,Prop} from 'vue-property-decorator';
@Component
export class myCheck extends Vue{
@Model ('change', {type: Boolean}) checked!: boolean;
@Prop({default: 'default value'}) checked:boolean
change(){
console.log(6666)
}
}