Vue之非单文件组件介绍

简介

主要介绍非单文件组件的方式创建Vue组件、使用。
非单文件组件指的是一个文件中包含多个vue组件。
非单文件组件实际上是html文件。

使用组件化主要分为三步:

  1. 编写组件。
  2. 注册组件。
  3. 使用组件(组件标签)。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>非单文件组件</title>
</head>
<body>
    <div id="root1">
        <!-- 第三步:使用组件,也就是使用组件标签,标签名是注册主键时使用的key -->
        <school></school>
        <hr>
        <student></student>
    </div>

    <!-- <div id="root2">
    </div> -->
    <script src="./js/vue.js"></script>
    <script>
        Vue.config.productionTip = false;

        //这里是第一步,创建组件,使用Vue.extend函数进行创建,传入一个配置对象
        // 创建组件有一个注意点是传入的配置对象不能配置el配置项,因为组件时不属于谁的,到时使用时由vue实例确定在哪使用。
        // 创建组件第二个注意点是,data数据必须写成函数的形式,并且函数返回一个对象。
        const school = Vue.extend({
            //配置组件使用的模板,需要用一个div套在外面,确保只有一个根元素。
            //这里就封装了组件的html。
           template:`
           <div>
           <div>学校:{{schoolName}}</div>
           <div>地址:{{schoolAddress}}</div>
           </div>
           `,
           //配置数据
           data() {
               return {
                schoolName:"尚硅谷",
                schoolAddress:"北京"
               }
           },
        });
        const student = Vue.extend({
            template:`
            <div>
            <div>学生:{{studentName}}</div>
            <div>年龄:{{studentAge}}</div>
            </div>
            `,
            data() {
               return {
                studentName:"张三",
                studentAge:18
               }
           },
        });

        //创建一个vue对象来注册组件
        const vm = new Vue({
            //管理id为root1的容器
            el:"#root1",
            //第二步:注册组件,这里属于局部注册,也就是只有该vm管理的容器才能使用school组件和student组件。
            components:{
                school:school,
                student:student
            }
        })
        
    </script>

    
</body>
</html>

效果:
在这里插入图片描述
vue开发者工具:
在这里插入图片描述

为什么组件的data只能写成函数形式呢,因为组件是要达到复用的,如果组件在多个地方复用,比如在a地方和b地方使用了组件。
如果组件data能够写成对象形式,那么,等于所有使用到他的地方都用到了同样引用的对象(也就是dataA===dataB返回true),这个a地方修改data属性值会影响到b地方。

用原生js演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    

    <script>

        //使用data对象的情况:
        let data = {
            name:"yehaocong",
            age:25
        }


        //模拟A地方和B地方使用了data
        let dataA = data;
        let dataB = data;

        //使用函数形式的情况
        function dataF(){
            //因为每次返回的都是一个新的对象
            return {
                name:"yehaocong",
                age:25
            }
        }

        //模拟C地方和D地方使用了Data
        let dataC = dataF();
        let dataD = dataF();

    </script>
</body>
</html>

效果:
在这里插入图片描述
在这里插入图片描述

上面的注册形式是局部注册,也就是只有该vue实例管理的容器才能使用该组件。
代码:
在这里插入图片描述
在这里插入图片描述

效果:

在这里插入图片描述

全局注册组件:
代码:
在这里插入图片描述
效果:
在这里插入图片描述

注意事项:
  1. 组件名称的定义:
    官方推荐首字母大写,多个单词用横杠分隔。
    比如 My-School
    使用时就用 <My-School></My-School>

  2. vue组件的另外一种定义方式是直接使用对象定义:
    const school = {
    //这个就是配置对象。
    }
    在这里插入图片描述
    也能成功。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值