typescript - 使用 vue3 和 typescript 访问动态模板引用
问题描述
我有一个组件可以像这样动态呈现组件:
<div class="row" v-for="(formField, index) in form.formFields" :key="index">
<boolean-form-item
v-if="formField.fieldType == 'Boolean'"
v-model="form.formFields[index]"
:ref="formField.configuration?.key"
></boolean-form-item>
<numeric-form-item
v-if="formField.fieldType == 'Number'"
v-model="form.formFields[index]"
:ref="formField.configuration?.key"
></numeric-form-item>
<dropdown-form-item
v-if="formField.fieldType == 'Dropdown'"
v-model="form.formFields[index]"
:ref="formField.configuration?.key"
></dropdown-form-item>
</div>
每个表单项类型都有一个我想要访问的 validate() 方法。问题是,当使用 $ref 访问它们时,类型是未知的,并且 typescript 会抛出一个错误。
validate() {
this.form.formFields.forEach((field) => {
var key = "";
if (field.configuration) {
key = field.configuration.key;
}
console.log(this.$refs[key].validate()); // <<--- Error Object is of type 'unknown'
});
},
如何访问组件的动态创建的子组件并执行 validate() 方法?
解决方案
您可以使用打字稿类型转换并执行类似的操作
interface VueFormField extends Vue {
validate: () => any
}
validate() {
this.form.formFields.forEach((field) => {
let key = "";
if (field.configuration) {
key = field.configuration.key;
}
console.log((this.$refs[key] as VueFormField).validate());
});
}
推荐阅读
- python - Python tox:在成功的测试运行时显示标准输出/打印?
- git - 终端上的 git:一个文件夹 - 两个 git 提交
- reactjs - 无法在“React.js”中使用 Formik 实现两种方式绑定
- c++ - 如果 include_directories 中的路径之一不存在,为什么 CMakeLists 不抛出警告/错误(在编译期间)?
- reactjs - 反应 Firebase 数据库
- sql - 从请求中提供 SQL 时防止 SQL 注入
- laravel - 这句话如何在查询生成器中
- mongodb - 如何在 3.6.4 vs 2.4 Mongo 服务器 [system.js] 中执行 javascript 函数
- google-apps-script - Google App Script 调试器不会在断点处可靠地停止
- java - Date.plus 在 2.5.4 Groovy Runtime 中不起作用,有什么替代方法?