首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组件和子组件

组件和子组件
EN

Stack Overflow用户
提问于 2016-08-09 22:52:17
回答 2查看 24.5K关注 0票数 4

我是Vue.js新手,我在使用带有子组件的组件时遇到了一些困难。我有以下.vue文件

app.vue

代码语言:javascript
复制
<template>
  <section>
    <menu></menu>
    <h1>Create Your MIA</h1>
    <div id="board"></div>
    <slider>
      <skin></skin>
    </slider>
  </section>
</template>

slider.vue

代码语言:javascript
复制
<template>
  <div id="slider-panel">
    <h3>{{* heading}}</h3>
    <div class="slider">
      <slot>
        Some content
      </slot>
    </div>
  </div>
</template>

<script>
import skin from "./skin";
  export default {
    components: {
      skin: skin
    }
  };
</script>

skin.vue

代码语言:javascript
复制
<template>
    <div v-for="colour in colours">
      <div :style="{ backgroundColor: colour }">
        <img src="../assets/images/MIA.png"/>
      </div>
    </div>
</template>

<script>
  export default {
    data() {
      return {
        heading: "Choose Skin Tone"
      };
    }
  };
</script>

我正在尝试将皮肤子组件加载到组件中。除了皮肤子组件之外,一切都运行得很好,因为它没有编译。不过,我没有收到任何与编译或vue相关的错误。我还希望能够有几个滑块组件的实例,如下所示

app.vue

代码语言:javascript
复制
<template>
  <section>
    <menu></menu>
    <h1>Create Your MIA</h1>
    <div id="board"></div>
    <slider>
      <skin></skin>
    </slider>
    <slider>
      <foo></foo>
    </slider>
    <slider>
      <bar></bar>
    </slider>
  </section>
</template>

我不知道我做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-10 02:08:45

经过一些研究,我发现了this,它指的是一个is=属性,它将包含子组件模板。

所以在app.vue

代码语言:javascript
复制
<slider-component>
      <div is="skin-component" v-for="colour in colours"></div>
    </slider-component>

然后添加子组件。

票数 2
EN

Stack Overflow用户

发布于 2016-08-10 00:29:14

我不能100%肯定您在这里要实现什么,但是要在组件中编译一个组件,您需要在父模板中添加子组件,如下所示:

Slider.vue (我简化了结构):

代码语言:javascript
复制
<template>
  <div id="slider-panel">
    <h3>{{* heading}}</h3>
    <skin></skin>
  </div>
</template>
<script>
import skin from './skin'
export default {
  components : {
    'skin': skin
  }
}
</script>

App.vue:

代码语言:javascript
复制
<template>
  <section>
    <menu></menu>
    <h1>Create Your MIA</h1>
    <div id="board"></div>
    <slider></slider>
  </section>
</template>

实际上,如果将skin添加到应用程序的模板中,将其添加到slider组件模板中,则假设其作用域为app而不是slider,则会将其包括(并呈现)。为了在skin范围内添加slider,需要将其添加到slider的模板中。

其他一些事情:

祝好运!

更新:

如果您希望slider组件与内容无关,并且能够在其中插入您想要的任何内容,那么您有两个选项(我可以想到):

  1. slider组件中删除所有逻辑,并使skin成为app的后代。然后在slider组件中使用插槽,如下所示:

Slider.vue:

代码语言:javascript
复制
<template>
  <div id="slider-panel">
    <h3>{{* heading}}</h3>
    <slot></slot>
  </div>
</template>
<script>
export default {}
</script>

App.vue:

代码语言:javascript
复制
<template>
  <section>
    <menu></menu>
    <h1>Create Your MIA</h1>
    <div id="board"></div>
    <slider>
      <skin></skin>
    </slider>
  </section>
</template>
<script>
import skin from './skin'
export default {
  skin: skin
}
</script>
  1. 如果您知道滑块内部总是有一组封闭的组件,则可以使用动态组件:https://vuejs.org/guide/components.html#Dynamic-Components
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38861672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档