学习Vue公司组成的API(和打字稿),从我发现的文档,我应该使用ref(null)
一个子组件我有内部使用<template>...</template>
。
这个子组件有像这样的方法open()
,我像这样访问它:
setup() {
const subcomponentRef= ref(null);
subcomponentRef.value.open();
return { subcomponentRef };
}
Run Code Online (Sandbox Code Playgroud)
我同意这可能会显示Object is possibly 'null'.
指向的错误subcomponentRef.value
,但奇怪的是即使我添加了条件if (subcomponentRef !== null && subcomponentRef.value !== null) { ... }
,它仍然显示该错误。为什么??
也尝试访问它,subcomponentRef?.value?.open()
但我收到此错误Property 'open' does not exist on type 'never'.
。
还尝试添加非空断言,例如confirmation.value!.open();
并收到相同的错误Property 'open' does not exist on type 'never'.
。
知道这里有什么问题吗?或者ref(null)
,我应该使用实际组件预定义它而不是使用?但我不知道如何正确地做到这一点,在文档中找不到。
emit
在分离的逻辑文件中访问的正确方法(或更好的方法)是什么?
这就是我目前所做的工作:
foo.js
export default (emit) => {
const foo = () => { emit('bar') };
return { foo };
}
Run Code Online (Sandbox Code Playgroud)
然后在消费组件上:
import { defineComponent } from '@vue/composition-api';
import foo from './foo';
export default defineComponent({
setup(props, { emit }) {
const { foo } = foo(emit);
return { foo };
}
});
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更合适的方法来做到这一点?或者emit
在可消耗文件中调用是一种不好的做法吗?
我试图将 <p> 标签在其容器内居中,虽然我已经能够(使用 top/translateY)技巧将标签本身居中,但文本的中心实际上并不是 <p> 的中心标签的内容,如下所示(红线是标签的真正中间):
如何使 <p> 标签中的文本也居中?