如何在 vuejs 2.5.x 中正确使用插槽范围?

Posted

技术标签:

【中文标题】如何在 vuejs 2.5.x 中正确使用插槽范围?【英文标题】:How to use slot scope correctly within vuejs 2.5.x? 【发布时间】:2020-01-08 10:08:39 【问题描述】:

我正在尝试在我们的 Vue 应用程序中使用 slot-scope 功能(旧语法 v2.5.x):https://vuejs.org/v2/guide/components-slots.html#Scoped-Slots-with-the-slot-scope-Attribute,但它不起作用。

这是我的子组件

<template>
  <div class="hello">
    <h1> msg </h1>
    <slot></slot>
  </div>
</template>

<script>
export default 
  name: "ChildComponent",
  props: 
    msg: String
  ,
  data() 
    return 
      foo: "bar"
    ;
  
;
</script>

我尝试从 主要组件 中使用如下:

<template>
  <div id="app">
    <ChildComponent msg="Hello Vue in CodeSandbox!">
      <ul slot-scope="props">
        <li>foo: props.foo</li>
        <li>msg: props.msg</li>
      </ul>
    </ChildComponent>
  </div>
</template>

<script>
import ChildComponent from "./components/ChildComponent";

export default 
  name: "App",
  components: 
    ChildComponent
  
;
</script>

这里是代码沙盒示例的链接:https://codesandbox.io/s/vue-template-lg8r3

我做错了什么?谢谢!

【问题讨论】:

【参考方案1】:

您混淆了普通插槽和作用域插槽。

假设您需要作用域插槽,则需要更改:

<slot></slot>

到这里:

<slot :foo="foo" :msg="msg"></slot>

它们不会自动通过。

【讨论】:

好的,它有效。但是我在官方教程中没有看到这个,我错过了吗?请指出写在哪里? @Anatoly 在vuejs.org/v2/guide/components-slots.html#Scoped-Slots 中进行了介绍。请注意,&lt;slot&gt; 在子代中的行为在 2.5 和 2.6 之间没有改变,只是父代的属性发生了变化。 谢谢@skirtle,我现在看到了。他们在同一手册中混合了新旧版本的功能,这让我很困惑。非常感谢!

以上是关于如何在 vuejs 2.5.x 中正确使用插槽范围?的主要内容,如果未能解决你的问题,请参考以下文章

如何在混合 VueJS 应用程序上使用(命名)插槽

如何将数据从插槽范围设置到组件

Vuejs之Component slot 插槽详解

VueJS - 将插槽和作用域插槽向下传递给子模板中的组件

如何在 VueJS 中将模板(插槽)从祖父组件传递给孙子?

故事书代码预览不显示 VueJS 中插槽的使用情况