一篇文章带你详解Vue 组件化开发

Vue 组件化开发

什么是组件化?

如果我们将一个页面中所有的处理逻辑全部放在一起,处理起来就会变得非常复杂,而且不利于后续的管理以及扩展。但如果,我们讲一个页面拆分成一个个小的功能块,每个功能块完成属于自己这部分独立的功能,那么之后整个页面的管理和维护就变得非常容易了。

  • 将一个完整的页面分成很多个组件。
  • 每个组件都用于实现页面的一个功能块
  • 每一个组件又可以进行细分。

Vue组件化思想

它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。任何的应用都会被抽象成一颗组件树

组件化思想的应用:

  • 尽可能的将页面拆分成一个个小的、可复用的组件。
  • 这样让我们的代码更加方便组织和管理,并且扩展性也更强。

注册组件的基本步骤

组件的使用分成三个步骤:

  1. 创建组件构造器对象
let cpnC = Vue.extend({
            template: `
            <div>
                <h2>
                    我是标题
                </h2>
                <p>
                    我是内容
                </p>
            </div>`
        })
  1. 注册组件
Vue.component('my-cpn', cpnC);
  1. 使用组件
    <div id="app">
        <my-cpn></my-cpn>
        <my-cpn></my-cpn>
        <my-cpn></my-cpn>
    </div>

Vue.extend():

  • 调用Vue.extend()创建的是一个组件构造器。
  • 通常在创建组件构造器时,传入template代表我们自定义组件的模板。
  • 该模板就是在使用到组件的地方,要显示的HTML代码。

Vue.component():

调用Vue.component()是将刚才的组件构造器注册为一个组件,并且给它起一个组件的标签名称。

所以需要传递两个参数:

  1. 注册组件的标签名
  2. 组件构造器

组件必须挂载在某个Vue实例下,否则它不会生效。

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <my-cpn></my-cpn>
        <my-cpn></my-cpn>
        <my-cpn></my-cpn>
    </div>
    <script>
        let cpnC = Vue.extend({
            template: `
            <div>
                <h2>
                    我是标题
                </h2>
                <p>
                    我是内容
                </p>
            </div>`
        })
        Vue.component('my-cpn', cpnC);
        let app = new Vue({
            el: '#app',
            data: {

            }
        })
    </script>
</body>

</html>

组件语法糖形式

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <cpn1></cpn1>
        <cpn2></cpn2>
    </div>
    <script>
        Vue.component('cpn1', {
            template: `
            <h2>aaaaa</h2>
            `
        });
        let app = new Vue({
            el: '#app',
            data: {

            },
            components: {
                'cpn2': {
                    template: `
            <h2>bbbbb</h2>
            `
                }
            }
        })
    </script>
</body>

</html>

组件分离写法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <cpn></cpn>
        <cpn></cpn>
        <mycpn></mycpn>
    </div>
    <template id="cpn">
        <div>
            <h2>hahahaha</h2>
        </div>
    </template>
    <template id="cpn2">
        <div>
            <h2>hehehehe</h2>
        </div>
    </template>
    <script>
        Vue.component('cpn', {
            template: '#cpn'
        });
        let app = new Vue({
            el: '#app',
            data: {

            },
            components: {
                'mycpn': {
                    template: '#cpn2'
                }
            }
        })
    </script>
</body>

</html>
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页