VUE组件化

《前言》:有时候有一组html结构的代码,并且这个上面可能还绑定了事件。然后这段代码可能有多个地方都被使用到了,如果都是拷贝来拷贝去,很多代码都是重复的,包括事件部分的代码都是重复的。那么这时候我们就可以把这些代码封装成一个组件,以后在使用的时候就跟使用普通的html元素一样,拿过来用就可以了。

一:VUE组件化

     VUE框架的核心:数据驱动和组件化。

    组件的概念:

           组件是自定义标签,vueJS提供的组件可以让程序员自定义标签,对页面进行模块化。每个

     标签里包含HTML,CSS,JS。

           vue的组件就是一个vue对象。(vue的两大核心:数据驱动,组件化) 。vue对象的配置项

     在vue组件里也可以使用。

    组件的配置项如下: ​

                没有el属性。 ​ template:html模板代码,只能有一个根标签

                data:必须是个函数 ​

                methods:

                ………………………………

     一个完整的标签格式是: <标签名 属性名=“属性值" 事件=”函数“>内容</标签名>

     组件和函数封装的区别:

          组件封装的是完整的页面功能(包括:HTML、CSS、JS),而函数只封装JS(逻辑)。

          组件完成的是页面的模块化;js完成的是逻辑的模块化。

二:VUE组件的基本使用

        1.定义组件:

let 组件变量名= Vue.extend({
        template:'<div class="header">{{msg}},我是header组件</div>'
        data:function(){
			return {
				msg:”hi”
			}
		},
  });
//=======================简写========================
let 组件变量名={
    template:'<div class="header">{{msg}},我是header组件</div>'
    data:function(){
        return {
            msg:”hi”
        }
    }
}; 

        2.注册组件:

                1)、全局注册

Vue.component('标签名',组件变量名);
全局注册的组件,在任何vue对象里都可以使用

                2)、局部注册 

//在vue对象的components选项里进行注册
new Vue({
     el:
     components:{
    	 标签名:组件变量名
     }     
});
局部注册的组件,只能在当前vue对象(组件)里使用。

        3.使用组件:组件就是自定义标签,所以,使用组件,就跟使用标签是同样的。

<标签名></标签名>

        写个例子看看吧:

<body >
    <div id="box">
        <!--使用组件(组件就是自定义标签,所以,就是使用标签)-->
       <chat></chat>
    </div>
</body>
</html>
<script src="./js/vue.js"></script>
<script>
// 定义组件
let chatObj = {
    template:`
        <div>
            <div style="width:200px;height:300px;border:1px solid black" v-html="msg"></div><br/>
            <input type="text" v-model="str" />
            <input type="button" value="发送" @click="send" />
        </div>
    `,
    data:function(){
        return{
            str:"",
            msg:""
        }
    },
    methods:{
        send(){
            this.msg += this.str+"<br/>"
            this.str ="";
        }
    }
};

// 2、全局注册
Vue.component("chat",chatObj);
     
let vm = new Vue({
        el: "#box",
        data: {
        },
    	//局部注册:
        components:{
            "chat":chatObj
        }
    });

</script>

        4.组件嵌套:把一个组件的标签写在另外一个组件的template里,就是组件嵌套。

  //子组件 
  let mycomson = {
        template:"<div>我是son里的div:{{msg}}</div>",    
        data:function(){
            return {
                msg:"hi:son"
            }
        }
    };
   //父组件
    let myComParent = {
        template:`<div>
                        <p>我是p:{{msg}}</p>
                        <my-com-son></my-com-son>                    
                    </div>`,
        data:function(){
            return {
                msg:"hi"
            }
        },
        components:{
            // 局部注册了另外一个组件
            "my-com-son":myComSon
        }    
    };

        5.组件编写方式与 Vue 实例(对象)的区别:

                1、组件的标签名不可和html官方的标签名同名,标签名如果小驼峰,那么使用时,用短横线(羊肉串的写法),或者组件名首字母大写(这个规则是在未来的单文件组件,模块化的写法里使用)。

                2、组件没有el选项,只有根实例存在el,组件里使用template定义模板

                3、组件模板(html代码)只能有一个根标签

                4、data必须是个函数(面试题),vue组件的data为什么是个函数。

                一个组件的 data 选项必须是一个函数,且要有返回object(就是vue对象的data),只有这样,每个实例(vue组件对象)就可以维护一份被返回对象的独立的拷贝,否则,组件复用时,数据相互影响。即:组件的作用域(应该)是独立的。

                简单回答:如果不是函数,那么,复用的组件的data共享同一块内存空间。

                

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小可乐吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值