路飞-全局组件

全局组件

概念:

概念:所有实例都能用全局组件。
详细:全局组件只需要创建和渲染,只要在挂在点内都可以渲染,同局部组件一样每个组件都有自己的名称空间,需要注意的是全局组件必须写在Vue实例创建之前,才在该根元素下面生效;
局部组件的使用流程:

1 创建局部组件》2 注册在某一个跟组件中》3 渲染

全局组件的使用流程:

1 创建全部组件==》2 渲染

全局组件与全局组建的区别:

1 全局组件创建后无需注册到其他组件中。

2 全部组件在任何根组件中都可以使用,局部组件只可以在注册的根组件中使用

全局组件与局部组件的相同点:

1 渲染时每个全局组件标签也都有自己的名称空间。

// 创建全局组件,通过 Vue.component('组件名', 组件对象主体);
    Vue.component('gTag', {
            template: `
            <p style="color:red;">
                <span @click="action">{{ num }}</span>
            </p>
            `,
            data () {
                // 每次渲染全局组件的时候,都会有自己的名称空间,同局部组件一样也实现了数据隔离
                return {
                    num: 0
                }
            },
            methods: {
                action() {
                    this.num++;
                }
            }
        }

详细代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>全局组件</title>
</head>
<body>
    <div id="app">
        <!--<p-tag></p-tag>-->
        <!--<p-tag></p-tag>-->

        <g-tag></g-tag> <!-- 只要是vue的挂载点内都有效果-->
        <p-tag></p-tag> <!-- 有效 因为p-tag在 #app中注册过-->
    </div>

    <div id="zz">

        <g-tag></g-tag> <!-- 只要是vue的挂载点内都有效果-->
        <p-tag></p-tag> <!--无效 因为p-tag只在 #app中注册过 -->

    </div>
    <g-tag></g-tag> <!-- 不在vue的挂载点内没有效果-->

</body>
<script src="js/vue.js"></script>
<script>
    // 局部组件
    let pTag = {
        template: `
        <p>
            <span @click="action">{{ num }}</span>
        </p>
        `,
        data () {
            return {
                num: 0
            }
        },
        methods: {
            action() {
                this.num++;
            }
        }
    };

    // 创建全局组件,通过 Vue.component('组件名', 组件对象主体);
    Vue.component('gTag', {
            template: `
            <p style="color:red;">
                <span @click="action">{{ num }}</span>
            </p>
            `,
            data () {
                // 每次渲染全局组件的时候,都会有自己的名称空间,同局部组件一样也实现了数据隔离
                return {
                    num: 0
                }
            },
            methods: {
                action() {
                    this.num++;
                }
            }
        }
    );
    // 根组件 #app
    new Vue({
        el: '#app',
        components: {
            pTag,
        }
    });
    // 跟组件 #zz
    new Vue({
        el: '#zz',
        components: {
            // pTag,
        }
    })
</script>
</html>
posted @ 2019-09-04 12:32  张明岩  阅读(145)  评论(0编辑  收藏  举报