1.子组件的名字是以大写字母开头

2.驼峰命名

1. 定义一个子组件

在src下面的components下面新建一个文件MovieItem.vue

  1. //1.src/components/MovieItem.vue
  2. <template>
  3. <div>
  4. <img src="../images/bg.webp" alt="">
  5. <p>你好</p>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. name:"MovieItem" //这个名字和组件名字要一致
  11. }
  12. </script>
  13. <style scoped>
  14. </style>

1.2.在App.vue中导入子组件

在父组件里面

  1. import MovieItem from './components/MovieItem'

1.3.在components属性中注册

在父组件里面注册一下

  1. export default {
  2. components:{
  3. MovieItem
  4. }
  5. }

1.4.在模板中使用

在父组件里面写,

  1. <MovieItem v-for="item of movies" :key="item.id"></MovieItem>

也可以使用下划线使用

  1. <movie-item ></movie-item>

2.父组件向子组件传值

  1. //1.给父组件定义一个data属性,向子组件传递数据
  2. <template>
  3. <div id="app">
  4. <MovieItem :data="item" v-for="item of movies" :key="item.id"></MovieItem>
  5. </div>
  6. </template>
  7. //2.在子组件的props属性中接收
  8. <script>
  9. export default {
  10. name:"MovieItem",
  11. props:{
  12. data:{
  13. type:Object
  14. }
  15. }
  16. }
  17. </script>
  18. //3.使用数据--在MovieItem.vue里面写
  19. <template>
  20. <div>
  21. <img :src="data.images.small" alt="">
  22. <p>{{data.title}}</p>
  23. </div>
  24. </template>

3.子组件自定义事件向父组件传参

  1. //1.使用$emit方式自定义事件,向父组件传参
  2. <template>
  3. <div>
  4. <button @click="handleDelete(index)">删除</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name: "HomeTable",
  10. ...
  11. methods:{
  12. handleDelete(index){
  13. this.$emit('deleteItem',index) //通过$emit传过去
  14. }
  15. }
  16. };
  17. </script>
  1. //2.父组件接收子组件传递过来的事件参数
  2. <home-table :data="arr" @deleteItem="handleDelete"></home-table>
  3. <script>
  4. import HomeTable from './components/HomeTable'
  5. export default {
  6. name: 'app',
  7. ...
  8. methods:{
  9. ...
  10. handleDelete(index){
  11. this.arr.splice(index,1)
  12. }
  13. }
  14. }
  15. </script>

*如果图片取不到

在public/index.html中输入:
image.png