使用
1、安装npm install –save vue-property-decorator
@Component (from vue-class-component)
@Prop
@Model
@Watch
@Emit
@Inject
@Provide
Mixins (the helper function named mixins defined at vue-class-component)
2、@Component
1 | import { componentA,componentB } from '@/components'; |
ts写法
1 | import { Component, Vue } from 'vue-property-decorator'; |
3、@Prop 父子组件之间值的传递
1 | export default { |
ts写法
1 |
|
4、@Model (组件之间,checkbox)
父组件中使用 v-model=”checked” 子组件
1 | <input type="checkbox" :checked="checked" @change="change"> |
js写法 (2.2.0+ 新增)
1 | export default { |
ts写法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import { Vue, Component, Model, Emit } from 'vue-property-decorator';
export default class YourComponent extends Vue{
('change', {
type: Boolean
})
checked!:boolean;
('change')
change(e: MouseEvent) {
}
}
5、@Watch
1 | export default { |
ts写法1
2
3
4
5
6
7import { Vue, Component, Watch } from 'vue-property-decorator';
export default class YourComponent extends Vue{
('person', { immediate: true, deep: true })
onPersonChanged(val: Person, oldVal: Person) { }
}
6、@Emit
由@Emit $emit 定义的函数发出它们的返回值,后跟它们的原始参数。 如果返回值是promise,则在发出之前将其解析。
如果事件的名称未通过事件参数提供,则使用函数名称。 在这种情况下,camelCase名称将转换为kebab-case。
js写法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31export default {
data() {
return {
count: 0
}
},
methods: {
addToCount(n) {
this.count += n
this.$emit('add-to-count', n)
},
resetCount() {
this.count = 0
this.$emit('reset')
},
returnValue() {
this.$emit('return-value', 10)
},
promise() {
const promise = new Promise(resolve => {
setTimeout(() => {
resolve(20)
}, 0)
})
promise.then(value => {
this.$emit('promise', value)
})
}
}
}
1 | import { Vue, Component, Emit } from 'vue-property-decorator' |