Vue组件

        在之前我们说过,Vue最强大的功能之一就是组件。那究竟什么是组件呢,我们一探究竟。

        组件:实现应用中局部功能代码资源的集合

        组件可以扩展 HTML 元素,封装可重用的代码。

        组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树:

         在官网中提到了组件是可以复用的vue实例,说明组件接收的配置项是大致相同的,例如data、computed、watch、methods以及生命周期钩子等。但是像el这种根实例特有的选项组件是没有的。

        简单来讲,vue实例就像是一个大哥,手底下带领着数十个组件小弟,而只有大哥才有决定权对谁服务。

        那么组件到底应该怎么去用呢?

1.定义组件(创建组件)

        使用Vue.extend(options)创建

注意:
        1.不写el,组件由vm管理
        2.data必须写成函数,避免组件被复用时,数据存在引用关系
        3.使用template可以配置组件结构

        const school = Vue.extend(options)可简写为 const school= options()

2.注册组件

        局部注册: new Vue 时传入components选项
        全局注册: Vue.component('组件名',组件)

3.使用组件(写组件标签)

        <组件名></组件名>  或者 <组件名/>

        注意:不使用脚手架时,<组件名/>会导致后续组件不能渲染

关于组件名:

        如果是一个单词组成:

                1.全小写,例如:shool

                2.首字母大写,例如:School

        如果由多个单词组成:

                1.kabab-case命名,例如:my-shool

                2.CameCase命名,例如:MySchool(需要Vue脚手架支持)

        如果vm中有多个组件,那么vm的工作量会非常大,于是组件中有一组件管理所有的子组件,而这个组件只负责和vm进行交流,那么这个组件我们一般命名为App组件。在这里就使用到了组件的嵌套,即一个组件中可以有子组件,所有的子组件都被该组件管理,不能越级管理。

例:组件的嵌套

<body>
    <div id="root"></div>
    <script>
        Vue.config.productionTip = false   //阻止 vue 在启动时生成生产提示。 

        // 注册学校组件
        const School = Vue.extend({
            name: 'shcool',
            template: `
            <div>
                <h2>学校名字:{{name}}</h2>
                <h2>学校地址:{{adress}}</h2>
            </div>
            `,
            data() {
                return {
                    name: "尚硅谷",
                    adress: "北京"
                }
            }
        })
        // 注册学生组件
        const Student = Vue.extend({
            name: 'Student',
            template: `
            <div>
                <h2>学生名字:{{name}}</h2>
                <h2>学生年龄:{{age}}</h2>
            </div>            
            `,
            data() {
                return {
                    name: '张三',
                    age: 18
                }
            }
        })
        const App = {
            name: 'App',
            template: `
            <div>
                <School></School>
                <Student></Student>
            </div>
            `,
            components: { School, Student }
        }

        const vm = new Vue({
            el: '#root',
            template: `<App></App>`,
            components: { App }
        })


    </script>
</body>

        在这里案例中,是一个非单文件组件,还有单文件组件,即在这个.vue文件中只包含一个组件且包含这个组件中的所有html、css、js代码。但单文件组件需要脚手架的支持,在这里不多作探讨。

关于VueComponent

        组件本质是名为VueCompoent的构造函数,且不算程序员定义的,是Vue.extend生成的。当我们创建组件时,Vue会帮我们生成一个组件实例对象。当我们每次调用Vue.extend时,返回的都是全新的VueComponent。

        在VueComponent中的this指向它的实例对象,简称vc。

内置关系:

                VueComponent.prototype.__proto__ === Vue.prototype

        这个内置关系能够让组件实例对象(vc)可以访问到Vue原型上的属性、方法。非常重要!!

可爱动图小表情9

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值