Vue.js 如何从vue功能组件提供已通过的注入
树:Vue.js 如何从vue功能组件提供已通过的注入,vue.js,vuejs2,vue-component,vue-render-function,Vue.js,Vuejs2,Vue Component,Vue Render Function,树: 我有父母提供的$validator。 在FnChild内部,我将render函数与其他异步组件(Target)一起使用 inject:['$validator'], 渲染:(h,上下文)=>{ 返回h(目标、context.data、context.children) } 注入存在于上下文中。注入,但是如何使用功能组件将其传递给目标 我可以想象,只有将FnChild重写为非功能组件,并在FnChild中使用provide:['$validator'] UPD:正如答案中所指出的,您不
我有父母提供的$validator。
在FnChild
内部,我将render函数与其他异步组件(Target
)一起使用
inject:['$validator'],
渲染:(h,上下文)=>{
返回h(目标、context.data、context.children)
}
注入存在于上下文中。注入
,但是如何使用功能组件将其传递给目标
我可以想象,只有将FnChild重写为非功能组件,并在FnChild
中使用provide:['$validator']
UPD:正如答案中所指出的,您不需要在功能组件内部进行任何注入/提供,它只起作用
我的具体案例与v-validate和在每个组件中自动注入新的$validator
有关。在我的具体案例中,它是一个带有插槽的组件,它覆盖了$validator
,因为它里面没有注入:['$validator']
。结构很简单,如下所示:
母公司
<ComponentWithSlot>
<FnChild slot='my-slot' />
</ComponentWithSlot>
父级注入了验证器,但ComponentWithSlot没有,因此v-validate为ComponentWithSlot重新创建了新实例,并将其向下提供给FnChild,而不是来自父级组件的$validator
因此,一旦我在组件中添加了注入:['$validator']
,一切都很好,Target
现在正确地从父级接收$validator
,是专门设计用于:
允许祖先组件作为其所有子代的依赖项注入程序,而不管组件层次结构有多深,只要它们位于同一父链中
FnChild
根本不需要使用inject:['$validator']
无需在FnChild
render函数中传递与注入相关的任何内容
只需在Target
异步组件中使用inject:['$validator']
检查这个
提供和注入主要用于高级插件/组件库用例不建议在通用应用程序代码中使用它们。
在这种情况下,为什么需要使用渲染函数?除非绝对必要,否则我通常避免使用它们。@MJ_Wales我认为当您不真正需要实例或它是一个没有任何逻辑的组件(在我的情况下,它只是另一个异步组件的解析器)时,使用功能组件是一个好主意。那么为什么不做得更轻呢?但在vue中,使用功能组件通常是痛苦的。。。因为奇怪的工作方式,bug或者奇怪的api。这很公平。我认为这是一个范围问题。我会发布我的想法我不确定抱歉,删除了我不正确的答案。嗯,这很奇怪,可能是我在其他地方做错了什么。因为你的例子看起来很正确,谢谢。