【问题标题】:Vuejs Slot Parent ChildVuejs插槽父子
【发布时间】:2018-02-21 10:03:48
【问题描述】:

如何让这两个组件协同工作?

Vue.component('parent', {
    template: ''+
        '<slot name="foo"></slot>'+
    ''
});

Vue.component('child', {
    template: ''+
        '<div slot="foo">bar</div>'+
    ''
});

我以为我可以做这样的事情,但它似乎不起作用

Vue.component('parent', {
    components: [
        'child'
    ],
    template: ''+
        '<slot name="foo"></slot>'+
    ''
});

这是一个 JS Fiddle https://jsfiddle.net/3fjmLL52/

【问题讨论】:

  • 你想做什么?
  • 我已经添加了一个 JS Fiddle ......抱歉我还是 vue 的新手
  • 你想让孩子在父母内部呈现吗?
  • 是的,我希望插槽或“模板”像占位符一样位于父级中,然后将子级的内容转储在那里

标签: vue.js vuejs2


【解决方案1】:

如果您希望子级在父级中呈现,则模板应如下所示:

<div id="app">
    <main>
        <parent>
          <child slot="foo"></child>
        </parent>
    </main>
</div>

您也可以从子模板中删除slot="foo"

Vue.component('child', {
    template: `<div>bar</div>`
});

Vue.component('parent', {
    template: `
    <div>
      <slot name="foo">Default</slot>
      <h1><slot name="bar">Header</slot>
 	  </div>`
});

Vue.component('child', {
    template: '' +
        '<div>bar</div>' +
	''
});

new Vue({
    el: '#app'
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.js"></script>
<div id="app">
    <main>
        <parent>
          <child slot="foo"></child>
          <span slot="bar">Header Content</span>
        </parent>
    </main>
</div>

【讨论】:

  • 但是如果我有多个正在设置的插槽,那么我想保留slot="foo" 对吗?
  • 好的,我尝试更新我的 JS Fiddle,但我一定遗漏了一些东西 jsfiddle.net/3fjmLL52/1
  • 是多个槽,因为子级的内容将设置在模板内的不同位置
  • @BanningStuckey 孩子或父母是否有多个批次?我用父级多个插槽的示例更新了答案。
  • 两者...如果这不是 vue 方式,但在我当前的路径上两者兼而有之,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 2019-04-25
  • 2018-03-14
  • 2017-12-24
  • 2017-10-05
  • 2017-09-29
  • 2017-12-06
  • 2018-08-19
相关资源
最近更新 更多