Vue.js 父级v-if中的Vue子级=";假;韩元';无法执行,但除了在具有默认插槽的模式包装器内,为什么?

Vue.js 父级v-if中的Vue子级=";假;韩元';无法执行,但除了在具有默认插槽的模式包装器内,为什么?,vue.js,vuejs2,Vue.js,Vuejs2,请看这个最小的例子 1. 此最小模板不会引发任何错误,因为父级未呈现任何内容 {{i.dont.have.the.value} 2. 现在,如果我使用默认插槽创建一个模式包装器,并且仍然使用v-if Modal.vue 导出默认值{ 道具:{ 显示:布尔, }, }; 但是,这会抛出错误,为什么 App.vue {{i.dont.have.the.value} 从“@/components/Modal.vue”导入模态; 导出默认值{ 组成部分:{ 情态动词 }, }; [Vue w

请看这个最小的例子

1. 此最小模板不会引发任何错误,因为父级未呈现任何内容


{{i.dont.have.the.value}
2. 现在,如果我使用默认插槽创建一个模式包装器,并且仍然使用
v-if

Modal.vue

导出默认值{
道具:{
显示:布尔,
},
};
但是,这会抛出错误,为什么

App.vue

{{i.dont.have.the.value}
从“@/components/Modal.vue”导入模态;
导出默认值{
组成部分:{
情态动词
},
};
[Vue warn]:呈现错误:“TypeError:无法读取未定义的属性'dont'”

为什么会这样

我怎样才能创建一个模式,保证孩子们不会被执行,如果不显示


我无法在模式组件中直接使用
v-if
,因为我需要转换。

您在
App.vue
中的插槽上犯了一个错误,因为VueJS将尝试根据父范围解析您的
I.not.have.value
变量(您的插槽没有条件)

记住官方文件中的这条规则

Everything in the parent template is compiled in parent scope; everything in the child template is compiled in the child scope.

只需在正确的范围内定义变量,就可以了(如果在子组件中定义变量,并希望将其公开给父组件,则使用一个有范围的插槽)