创建组件两种形式:

    1. 非单文件组件
      一个文件中包含多个组件
      2.单文件组件
      一个文件中只包含一个组件

    我们先做一个例子:

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. </head>
    6. <body>
    7. <script type="text/javascript" src="./vue.js"> </script>
    8. <div id="app" >
    9. <h3>学校名称: {{ schoolName }}</h3>
    10. <h3>学校地址: {{ address }}</h3>
    11. <hr>
    12. <h3>学生名称: {{ studentName}} </h3>
    13. <h3>学生年龄: {{ age }} </h3>
    14. </div>
    15. <script type="text/javascript">
    16. var vm = new Vue({
    17. el:"#app",
    18. data:{
    19. schoolName:'南开大学',
    20. address: '天津和平',
    21. studentName: '张三',
    22. age:18,
    23. },
    24. })
    25. </script>
    26. </body>
    27. </html>

    image.png

    上面是我们常用的写法,但是现在我们要把学校和学生做两个组件

    image.png

    源代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
    <script type="text/javascript" src="./vue.js"> </script>
    <div id="app" >
        <!-- 编写组件标签 -->
        <Xuexiao></Xuexiao>
        <Xuesheng></Xuesheng>
        <Xuesheng></Xuesheng>
        {{ myname }}
    </div>
    
    <script type="text/javascript">
         // 1.创建一个school组件
        const school = Vue.extend({
            //template 这里必须只有一个根元素 ,所以要包一个div
            template:`
            <div>
            <h3>学校名称: {{ schoolName }}</h3>
            <h3>学校地址: {{ address }}</h3>
            </div>
            `,
    
            //1) el: '#root',  这里一定不要写el配置,因为所有的组件都要被一个vm管理,由vm决定服务与谁
            //2)data 方法需要是一个方法
            //3)  data 一定要有return
            data(){
                return{
                    schoolName:'南开大学',
                    address: '天津和平',
                }
            }
        })
    
        // 1.1.创建一个student组件
        const student = Vue.extend({
            template:`
            <div>
            <h3>学生名称: {{ studentName}} </h3>
            <h3>学生年龄: {{ age }} </h3>
            </div>
            `,
            data(){
                return {
                    studentName: '张三',
                    age:18,
                }
            }
        })
        // 2.局部注册一个组件
        var vm = new Vue({
            el:"#app",
            data:{
                myname: 'dailiang',
            },
            components:{
                Xuexiao: school,
                Xuesheng: student,
            }
        })
    </script>
    </body>
    </html>
    

    当然我们关于第二部局部注册这个事情还可以有一个优化

    image.png

    当然组件还可以做一些methods