从0开始学Vue系列14--组件的基本使用

116 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

我要一步一步往上爬~大家好,我是努力不浪费每分每秒热爱生活的小朋友,今天我们来一起学习一下组件的基本使用

1. 组件的定义

定义:组件就是实现应用中局部功能代码和资源的集合,代码指的是CSS、JS、HTML,资源指的是MP3、MP4、压缩包等等

图片1.png

2. 概念区分 : 模块和组件、模块化和组件化

模块

一般就是一个JS文件,向外提供特定功能的JS程序,因为JS文件很复杂,所以模块的作用就是简化JS编写,提高JS运行效率

组件

组件就是实现应用中局部功能代码和资源的集合,因为一个界面的功能很复杂,使用组件可以简化编码,提高运行效率

模块化

应用中的JS都用JS来编写,那么这个应用就可以称为模块化应用

组件化

应用按照功能点拆分,不同功能点就是不同的组件,应用就称为组件化

3. 使用组件的三大步骤

3.1 定义(创建)组件

使用Vue.extend(xx)创建,其中xx和new Vue(xx)时传入的那个xx是有区别的;

  • 不用写el: 组件就是一块砖,哪里需要哪里搬,因为所有组件都要被一个vm管理,由vm决定服务于哪个容器。
  • data必须写成函数:因为写成对象式是有引用关系的,如果两个地方同时使用了相同组件,那么一个地方改了data,另一个地方引用的data数据也会改变,而函数式每次调用data()都会返回一个全新的对象。这就避免组件被复用时,数据存在引用关系。
  • template可以配置组件结构

3.2 注册组件

  • 局部注册:new Vue时传入components选项,用的比较多
  • 全局注册:Vue.component('组件名',组件)

3.3 编写组件标签

写法:<组件名></组件名>

4. 举个栗子

<body>
    <div id="root">
        <hello></hello>
        <hr>
        <school></school>
    </div>

    <div id="root2">
        <hello></hello>
    </div>
</body>
<script type="text/javascript">
    //第一步:创建school组件
    const school = Vue.extend({
        template:`
            <div class="demo">
                <h2>学校名称:{{schoolName}}</h2>
                <h2>学校地址:{{address}}</h2>
            </div>
        `,
        data(){
            return {
                schoolName:'大学',
                address:'北京'
            }
        }
    })
    //第一步:创建hello组件
    const hello = Vue.extend({
        template:`
            <div>	
                <h2>你好啊!{{name}}</h2>
            </div>
        `,
        data(){
            return {
                    name:'Tom'
            }
        }
    })
    Vue.component('hello',hello)
    new Vue({
        el:'#root',
        //第二步:注册组件(局部注册)
        components:{
            school
        }
    })
    new Vue({
        el:'#root2',
    })
</script>

结果:

图片3.png

解释:

  • 通过Vue.component('hello',hello)局部注册的组件,school组件是跟着id=rootvm大哥玩的,是不能在id=root2中直接调用的,(没有在id为root2的vm中注册的前提下)
  • 通过Vue.component('hello',hello)全局注册的hello组件是可以在两个vm中使用的