将页面中公共部分拿出来封装起来的操作

<template>
    <div class="home">
        <Nav></Nav>
        <Main></Main>
        <Foter></Foter>
    </div>
</template>
<script>
    import Nav from ‘../components/Nav‘
    import Foter from ‘../components/Foter‘
    import Main from ‘../components/Main‘
    export default {
        name: ‘Home‘,
        components: {
            Nav,
            Foter,
            Main
        },
        data() {
            return {
                movies: [
                    {
                        id: 1,
                        title: "西游记",
                        year: "1997"
                    }
                ]
            }
        }
    }
</script>
<style>
</style>
从顶层组件将数据传递到子组件展示
父组件 Home.vue
<template>
    <div class="home">
        <Nav></Nav>
        <!-- 向子组件传递movies参数的值,如果不适用 v-bind 子组件变量名 就会被解析成传递的是字符串 -->
        <Main :movies="movies"></Main>
        <Foter></Foter>
    </div>
</template>
<script>
    import Nav from ‘../components/Nav‘
    import Foter from ‘../components/Foter‘
    import Main from ‘../components/Main‘
    export default {
        name: ‘Home‘,
        components: {
            Nav,
            Foter,
            Main
        },
        data() {
            return {
                movies: [
                    {
                        id: 1,
                        title: "西游记",
                        year: "1997"
                    }
                ]
            }
        }
    }
</script>
<style>
</style>
子组件 Main.vue
<template>
    <div>
        <p>{{movies.length}} Titles</p>
        <slot></slot>
        <ul class="movie-list">
            <li v-for="movie in movies" :key="movie.id">
                {{movie.title}} - {{movie.year}}
                 <span class="float-right">
                    <a class="imdb" :href="‘https://www.imdb.com/find?q=‘ + movie.title" target="_blank"
                        title="Find this movie on IMDb">IMDb</a>
                </span>
            </li>
        </ul>
    </div>
</template>
<script>
export default {
    name: ‘Main‘,
    // movies 父组件在使用该组件时,需要使用 该 变量名= 的方式传递数据进来,(可以理解成将值赋值给movies这个变量)
    //props: [‘movies‘] // 数组写法
        //  对象写法,可以类型限制,设置默认值
    props: {
        // 对象或者数组是default 需要是个方法 
        movies: {
            type: Array,
            default() {
                return []
            }
        }
    }
}
</script>
<style>
</style>
从底层组件通过事件将必要条件传递给父组件,父组件对数据更新之后展示
子组件 Main.vue
<template>
    <div>
        <p>{{userInfo.length}} Titles</p>
        <slot></slot>
        <ul class="movie-list">
            <li v-for="movie in userInfo" :key="movie.id">
                {{movie.title}} - {{movie.year}}
                 <span class="float-right">
                    <a class="imdb" :href="‘https://www.imdb.com/find?q=‘ + movie.title" target="_blank"
                        title="Find this movie on IMDb">IMDb</a>
                    <button @click="btnClick(movie)">点击我将把内容传递给父组件</button>
                </span>
            </li>
        </ul>
    </div>
</template>
<script>
export default {
    name: ‘Main‘,
    // props: [‘movies‘]    // 数组写法
    //  对象写法,可以类型限制,设置默认值
    props: {
        // 对象或者数组是default 需要是个方法 
        userInfo: {
            type: Array,
            default() {
                return []
            }
        }
    },
    methods: {
        btnClick: function (arg) {
            // console.log(arg)
            // 发射事件,给父组件, (事件名称, 参数), 事件名称推荐始终使用 kebab-case 的事件名。
            this.$emit(‘item-click‘, arg)
        }
    }
}
</script>
<style>
</style>
父组件 Home.vue
<template>
    <div class="home">
        <Nav></Nav>
        <!-- item-click 为子组件发送过来的方法名  mainClick 为父组件监听该事件的方法-->
        <Main :userInfo="movies" @item-click="mainClick"></Main>
        <Foter></Foter>
    </div>
</template>
<script>
    import Nav from ‘../components/Nav‘
    import Foter from ‘../components/Foter‘
    import Main from ‘../components/Main‘
    export default {
        name: ‘Home‘,
        components: {
            Nav,
            Foter,
            Main
        },
        data() {
            return {
                movies: [
                    {
                        id: 1,
                        title: "西游记",
                        year: "1997"
                    }
                ]
            }
        },
        methods: {
            // 该方法的作用打印 子组件传递的内容
            mainClick: function (item) {
                console.log(item)
            }
        }
    }
</script>
<style>
   
</style>
https://gitee.com/zy7y/hello-fast-api-vue
原文:https://www.cnblogs.com/zy7y/p/14493240.html