Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Vue常规插槽也可以在这个.scopedSlots中使用?_Javascript_Vue.js_Vuejs2_Vue Component_Vuejs3 - Fatal编程技术网

Javascript 为什么Vue常规插槽也可以在这个.scopedSlots中使用?

Javascript 为什么Vue常规插槽也可以在这个.scopedSlots中使用?,javascript,vue.js,vuejs2,vue-component,vuejs3,Javascript,Vue.js,Vuejs2,Vue Component,Vuejs3,请看这个最小的例子 Test.vue 从“Vue”导入Vue; 导出默认Vue.extend({ 安装的(){ log(Object.keys(this.$scopedSlots)); } }); App.vue 但它显示在这里。$scopedSlots 从“/Test.vue”导入测试; 导出默认值{ 组成部分:{ 试验 } }; 在上面的示例中,此控制台将注销[“此\u不是\u范围的\u插槽”] 为什么会这样 Vue实例中有两个属性 this.$slots this.$scopedS

请看这个最小的例子

Test.vue

从“Vue”导入Vue;
导出默认Vue.extend({
安装的(){
log(Object.keys(this.$scopedSlots));
}
});
App.vue

但它显示在这里。$scopedSlots
从“/Test.vue”导入测试;
导出默认值{
组成部分:{
试验
}
};
在上面的示例中,此控制台将注销
[“此\u不是\u范围的\u插槽”]

为什么会这样

Vue实例中有两个属性

  • this.$slots
  • this.$scopedSlots
  • 这两种行为完全不同:

  • 如果使用
    v-slot:my_scope_name=“{someValue}”
    ,则
    my_scope_name
    不会显示在
    中。$slots
  • 但是,无论您定义什么,您的命名插槽将始终显示在
    中。$scopedSlots
  • 为什么会这样

    我正在构建一个库,如果用户是否提供了命名插槽,我想进行有条件渲染,我是否应该始终使用
    this.$scopedSlots
    来检测这些内容?

    根据:

  • 所有
    $slot
    现在也作为函数公开在
    $scopedSlots
    上。如果使用渲染函数,现在建议始终通过
    $scopedSlots
    访问插槽,无论它们当前是否使用范围。这不仅会使将来的重构更加简单,从而添加一个作用域,还可以简化最终迁移到Vue 3的过程,在Vue 3中,所有插槽都是函数

  • 我相信新的插槽语法是以这种方式实现的,以便更轻松地迁移到Vue 3。看见