简单的Vue插槽示例不起作用

Scr*_*her 2 vue.js vue-component

我试图了解<slot>Vue模板中的用法。按照我的理解,插槽可用于将组件中的子内容传递到模板。

下面是一个简短的最小工作示例(也在codepen上)。

Vue.component('mine', {
  template: '#mine'
})

var app = new Vue({
  el: '#app' 
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.min.js"></script>

<script type="text/x-template" id="mine">
  <h1>this is it</h1>
  <slot></slot>
</script>

<div id="app">
  <mine>
    <p>why isn't this displayed</p>
  </mine>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望输出是这样的:

<h1>this is it</h1>
<p>why isn't this displayed</p>
Run Code Online (Sandbox Code Playgroud)

但是,发生的是呈现页面时第二行没有出现。

Dan*_*eck 5

模板需要具有单个根DOM元素。看起来Vue只是将h1当作整个模板,而将其余模板丢弃:

Vue.component('mine', {
  template: '#mine'
})

var app = new Vue({
  el: '#app' 
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.min.js"></script>

<script type="text/x-template" id="mine">
  <div>
    <h1>this is it</h1>
    <slot></slot>
  </div>
</script>

<div id="app">
  <mine>
    <p>why isn't this displayed</p>
  </mine>
</div>
Run Code Online (Sandbox Code Playgroud)

(使用该库的“开发人员模式”版本将为您提供有关此类问题的更好的错误消息:)

Vue.component('mine', {
  template: '#mine'
})

var app = new Vue({
  el: '#app' 
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://vuejs.org/js/vue.js"></script>

<script type="text/x-template" id="mine">
    <h1>this is it</h1>
    <slot></slot>
</script>

<div id="app">
  <mine>
    <p>why isn't this displayed</p>
  </mine>
</div>
Run Code Online (Sandbox Code Playgroud)