Vue的组件化开发-1

1.概念

组件是可复用的 Vue 实例,且带有一个名字。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用。
在自定义组件时,会用到Vue的全局APIVue.extend()Vue.component()
(1) Vue.extend()
使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。

(2) Vue.componment()
注册或获取全局组件。注册还会自动使用给定的 id 设置组件的名称。

创建并使用一个组件可以分为3步:

  1. 创建组件构造器 Vue.extend()
  2. 注册组件 Vue.componment()
  3. 在html中使用该组件

(实例代码可参考下文任意一段代码)

2.全局组件与局部组件

(1) 全局组件
全局组件,意味着可以在多个Vue的实例下使用。如下所示,既可以在id为app<div>下使用,也可以在id为app2<div>下使用。

<div id="app">
    <my-cpn></my-cpn>
</div>
<div id="app2">
    <my-cpn></my-cpn>
</div>
<script>
    //``ES6 字符串语法,可以换行
    //1.创建组件构造器对象
    const cpnc = Vue.extend({
        template:`<div>
                    <h2>i love u.</h2>
                    <p>okok,just so so.</p>
                  </div>`
    })
    //2.注册组件
    Vue.component('my-cpn',cpnc)//全局组件,意味着可以在多个Vue的实例下使用
    //Vue实例化对象--app和app2
    const app = new Vue({
        el:'#app',  //用于管理要挂载的数据
        data:{     //定义数据
        }
    });
    const app2 = new Vue({
        el:'#app2'
    });
</script>

结果如下:

在这里插入图片描述

(2)局部组件
局部,就意味着,只能在某个Vue实例下使用。
如下所示。

<div id="app">
    <cpn2></cpn2>
</div>
<div id="app2">
    <cpn2><cpn2>
</div>
<script>
    //``ES6 字符串语法,可以换行
    //1.创建组件构造器对象
    const cpnc = Vue.extend({
        template:`<div>
                    <h2>i love u.</h2>
                    <p>okok,just so so.</p>
                  </div>`
    })
    //2.注册组件(局部)
    const app = new Vue({
        el:'#app',  //用于管理要挂载的数据
        data:{     //定义数据
        },
        components:{
            //cpn使用组件时的标签名
            cpn2:cpnc
        }
    });
    const app2 = new Vue({
        el:'#app2'
    });
</script>

在这里插入图片描述

3.父组件与子组件

我们一般注册构造器是在Vue实例中,而父组件与子组件的关系则不一样。
子组件的注册是在父组件中。
父组件的注册在Vue实例中。

  • 达到效果:可以在父组件中使用子组件。
<div id="app">
    <cpn></cpn>     
</div>
<script>
    //``ES6 字符串语法,可以换行
    //1.创建组件构造器对象
    //子组件
    const cpnc2 = Vue.extend({
        template:`<div>
                    <h2>i love u,and i am son.</h2>
                    <p>这是第二个组件.</p>
                  </div>`
    });
    //父组件
    const cpnc = Vue.extend({
        template:`<div>
                    <h2>i love u.</h2>
                    <cpn2></cpn2>   //使用子组件
                    <p>我是第一个组件.</p>
                  </div>`,
        components:{
            cpn2:cpnc2   //注册子组件
        }
    });

    
    const app = new Vue({
        el:'#app',  //用于管理要挂载的数据
        components:{
            cpn:cpnc        //注册父组件
        }
    });
</script>

结果如下:
在这里插入图片描述
(子组件要写在父组件前。)
(一般也可以认为Vue实例是最顶层的组件–root)

另外,子组件不能在html中直接使用(超出了子组件的作用域)。

4.语法糖写法

(1) 全局组件

原来的写法:

    const cpnc2 = Vue.extend({
        template:`<div>
                    <h2>人生啊。。。</h2>
                  </div>`
    });
    Vue.component('cpn2',cpnc2)

语法糖:

    Vue.component('cpn23',{
        template:`<div>
                    <h2>人生啊。。。</h2>
                  </div>`
    });
(2) 局部组件

原来的写法:

    const cpnc = Vue.extend({
        template:`<div>
                    <h2>人生啊。。。</h2>
                  </div>`
    });
    
    const app = new Vue({
        el:'#app',  //用于管理要挂载的数据
        components:{
            //cpn使用组件时的标签名
            cpn:cpnc
        }
    });

语法糖:

    const app = new Vue({
        el:'#app',  //用于管理要挂载的数据
        components:{
            //cpn使用组件时的标签名
            cpn:{
                template: 
                `<div>
                    <h2>人生啊。。。</h2>
                  </div>`
            }
        }
    });

5.组件模板抽离写法

开发中不常使用,暂时略过。

6.组件的data数据存放

前面的组件内容都是写死的,而在开发中我们会使用传来的数据。
这里需要提出的一点是,由于组件属于一个单独封装的部分,因此组件的data不能放在Vue实例的data模块中,在组件内部应该有一个地方用于存放组件内的data。

Vue实例里面的data不同的时,组件的data不能是object,而必须是一个function,这个function返回一个objectobject内部保存着数据。

<div id="app">
    <cpn23></cpn23>
</div>
<script>
    Vue.component('cpn23',{
        template:`<div>
                    <h2>人生啊。。。</h2>
                    <p>{{title}}</p>
                  </div>`,
        data(){
                return {
                    title:'这是data里面的title'
                }
            }
    });
</script>

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

关于为什么Vue组件data只能是function指路博客链接

(鉴于篇幅过长, 进一步的组件问题会在下一篇文章《Vue的组件化开发-2》中讲)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值