学习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> 标签中的文本也居中?