Vue组件注册

全局组件注册

写法一
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
    <!-- 第三步:使用组件 -->
    <div id="app">
        <my-component></my-component>
    </div>
    <script>
        // 第一步:使用extend定义组件
        var myHeader = Vue.extend({
            template: '<h1>header</h1>'
        });
        // 第二步:使用Vue.component注册组件
        // 格式:Vue.component('组件的名称', 创建出来的组件模板对象)
        Vue.component('my-component', myHeader);

        new Vue({
            el: '#app'
        });
    </script>
</body>
</html>

在定义和注册组件时需要注意的地方:(定义全局组件和私有组件都要注意)

1. 第一步定义模板对象时,在最外层需要用一个根元素包裹起来。

2. 在第二步注册组件时,组件的名称不要使用驼峰的命名规则,应该使用两个单词之间用 - 连接的命名规则。

写法二

定义、注册组件一步到位

<body>
    <div id="app">
        <my-component></my-component>
    </div>
    <script>
        Vue.component('my-component', {
            template: '<div><h1>header1</h1><h2>header2</h2></div>'
        });

        new Vue({
            el: '#app'
        });
    </script>
</body>
写法三(推荐)

和写法二类似,只是把定义模板的代码分离出来,方便书写 html 代码

<body>
    <!-- 第一步:定义模板 -->
    <template id="myHeader">
        <div>
            <h1>header1</h1>
            <h2>header2</h2>
        </div>
    </template>
	<!-- 第三步:使用组件 -->
    <div id="app">
        <my-component></my-component>
    </div>
    <script>
        // 第二步:定义、注册组件
        Vue.component('my-component', {
            template: '#myHeader'
        });

        new Vue({
            el: '#app'
        });
    </script>
</body>

私有组件注册

我们还可以在 Vue 实例中定义私有组件,这样的话,就只有在当前 Vue 实例中可以使用这个组件。

写法一
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
    <div id="app">
        <my-component></my-component>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {},
            components: {
                'my-component': {
                    template: '<div><h2>我是私有组件</h2></div>'
                }
            }
        });
    </script>
</body>
</html>
写法二

写法二的写法就是把定义模板的步骤分离出来了。

<body>
    <template id="myHeader">
        <div>
            <h2>我是私有组件</h2>
        </div>
    </template>
    <div id="app">
        <my-component></my-component>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {},
            components: {
                'my-component': {
                    template: '#myHeader'
                }
            }
        });
    </script>
</body>