Vuejs组件

一、概念

①组件就是对局部视图的封装,组件(component)可以扩展HTML元素,封装可以重复使用的代码。在较高层面上,组件是自定义元素,vuejs的编译器为它添加特殊功能

②目前主流的前端框架angular,react、vue都是组件化开发思想,vue中的组件思想借鉴于react

③利用组件可以提高开发效率,增强可维护性

二、使用

①全局组件(通用组件):一般把网页中特殊的公共部分注册为全局组件,比如轮播图、tab选项卡、分页、通用导航等

    <div id="app">
        <my-header></my-header>
        <my-main></my-main>
        <my-footer></my-footer>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        // 组件的名字,不要使用原生的标签名称
        Vue.component('my-header',{
            template:'<header><h1>头部组件</h1></header>'
        });
        Vue.component('my-main',{
            template:`
            <div>
                <ul>
                    <li>轮播图</li>
                    <li>产品内容</li>
                    <li>商品展示</li>
                </ul>
            </div>
            `
        });
        Vue.component('my-footer',{
            template:'<footer><h1>底部组件</h1></footer>'
        });
        new Vue({
            el:'#app',
            data:{

            }
        });

②局部组件(子组件):一般是注册一些非通用的

    <div id="app">
        <my-child></my-child>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{

            },
            components:{
                myChild:{
                    template:'<div><h3>子组件</h3></div>'
                },
            },
        });
    </script>

③组件与组件之间是相互独立的:

  • 默认情况下,组件与组件之间无法进行跨组件数据访问,父子组件都不行
  • 组件就是一种特殊的vue实例,不需要实例化,它管理自己的template,模板组件的template必须只有一个根节点
  • 在组件中,也可以配置类似于vue实例中的一些选项资源,比如data、methods、computed等等

④组件中的data必须是函数

  • 组件的data必须是函数(手动new出来的Vue实例还是普通的对象)
  • 函数内部返回一个对象
  • 如下面这个例子,如果data不是一个函数,则点击其中一个会影响到其他的两个,不能相互独立开来
    <div id="app">
        <demo></demo>
        <demo></demo>
        <demo></demo>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        Vue.component('demo',{
            data:function(){
                return{
                    count:0
                }
            },
            template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
        });
        new Vue({
            el:'#app',
            data:{

            }
        });
    </script>

猜你喜欢

转载自www.cnblogs.com/EricZLin/p/9380176.html