在父组件中用refs去获取子组件内部的方法或者属性,以下面的demo为例,直接写this.$refs.childRef.getValue()
会报错,报错内容说’Vue | Element | Vue[] | Element[]'a这些类型中,没有我们调用的属性。但是我们很清楚,这个childRef
的类型是ChildComponent
,这个类型中是含有我们所需要的变量或者方法,因此给this.$refs.childRef
添加一个类型断言,告诉编译器,childRef
这个值的类型是ChildComponent
,这样就不会报错了。
断言的两种写法:(this.$refs.childRef as ChildComponent)
或者<ChildComponent>this.$refs.childRef
类型断言即手动指定一个值的类型,类型断言并非是类型转换,断言一个联合类型中不存在的类型会报错!
demo代码:
// 父组件
<template>
<div>
<ChildComponent ref="childRef" />
<div>ChildComponent Value is: {{childValue}}</div>
<a-button @click="getChildValue">Get ChildComponent Value</a-button>
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import ChildComponent from '@/components/HelloWorld.vue';
@Component({
components: {
ChildComponent,
},
})
export default class Test extends Vue {
public childValue: number = -1;
public getChildValue(): void {
// 写法一
this.childValue = (this.$refs.childRef as ChildComponent).getValue();
// 写法二
// this.childValue = (<ChildComponent>this.$refs.childRef).getValue();
}
}
</script>
// 子组件:
<template>
<div>{{value}}</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
@Component
export default class ChildComponent extends Vue {
public value: number = 1;
public getValue(): number {
return this.value;
}
}
</script>