0、对子组件的处理

0-1、定义一个子组件

  1. 组件的名字是以大写字母开头的
  2. 驼峰命名
  1. //components/MovieItem.vue
  2. <script>
  3. export default {
  4. name: "MovieItem"
  5. };
  6. </script>

0-2、在app.vue中导入子组件

  1. //导入子组件;
  2. <script>
  3. import HomeTable from './components/MovieItem'
  4. </script>
  1. //需要在components属性中注册;
  2. <script>
  3. import HomeTable from './components/MovieItem'
  4. export default {
  5. name: 'app',
  6. ....
  7. components:{
  8. MovieItem
  9. }
  10. }
  11. </script>
  1. //在模板中使用
  2. <template>
  3. <div id="app">
  4. //可以使用下划线命名使用
  5. <Movie_Item></Movie_Item>
  6. </div>
  7. </template>

1、父组件向子组件传值

1-1、父组件传递

  1. 给父组件里面的子组件定义一个属性(定义的属性名自己定),接收父组件传递过来的参数
  1. <MovieItem :data="item" v-for="item of movies" :key="item.id"></MovieItem>

1-2、子组件接收传递过来的数据

  1. //子组件接收的参数需要在props属性中注册
  1. <script>
  2. export default{
  3. name:"MovieItem",
  4. props:{
  5. data:{
  6. type:Object
  7. }
  8. }
  9. }
  10. </script>

1-3、子组件中使用数据

  1. <template>
  2. <div>
  3. <img :src="data.images.small" alt="">
  4. <p>{{data.title}}</p>
  5. </div>
  6. </template>

2、子组件自定义事件向父组件传值

2-1、子组件自定义事件

  1. 使用$emit方式自定义事件,向父组件传参
  1. <button @click="handleDelete(index)">删除</button>
  2. <script>
  3. export default {
  4. ...
  5. methods:{
  6. handleDelete(index){
  7. this.$emit("deleteItem",index)
  8. }
  9. }
  10. };
  11. </script>

2-2、父组件接收子组件传递过来的事件参数

  1. <MovieItem :data="item" v-for="item of movies" :key="item.id" @deleteItem="handleDelete"></MovieItem>
  2. <script>
  3. import MovieItem from './components/MovieItem'
  4. export default {
  5. name: 'app',
  6. ...
  7. methods:{
  8. handleDelete(index){
  9. console.log(index)
  10. }
  11. }
  12. }
  13. </script>