当前位置: 首页 > article >正文

Vue】Vue扫盲(四)组件化思想与简单应用

【Vue】Vue扫盲(一)事件标签、事件修饰符:@click.prevent @click.stop @click.stop.prevent、按键修饰符、及常用指令

【Vue】Vue扫盲(二)指令:v-for 、v-if、v-else-if、v-else、v-show

【Vue】Vue扫盲(三)计算属性和监听器

文章目录

    • 1、组件的概念
    • 2.1、组件的复用-全局组件
    • 2.2、组件的复用-局部组件

在大型应用开发的时候, 页面可以划分成很多部分。 往往不同的页面, 也会有相同的部分。 例如可能会有相同的头部导航。
但是如果每个页面都独自开发, 这无疑增加了我们开发的成本。 所以我们会把页面的不同部 分拆分成独立的组件,
然后在不同页面就可以共享这些组件, 避免重复开发。

1、组件的概念

在 vue 里, 所有的 vue 实例都是组件
在这里插入图片描述

2.1、组件的复用-全局组件

我们通过 Vue 的 component 方法来定义一个全局组件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <div id="app">
        <button v-on:click="count++">我被点击了{{count}}次</button>
        <!-- 使用抽取出来的公共组件,可以无限的被重复使用 -->
         <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
    </div>
    <script src="../node_modules/vue/dist/vue.js"></script>
    <script>
        /* 将点击增加数量的功能抽取成一个组件 */
        //1、全局声明注册一个组件
        Vue.component("counter",{
            template:` <button v-on:click="count++">我被点击了{{count}}次</button>`,
            data(){    //特别注意:这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响所有重复的组件
                return {
                    count:1
                }
            }
        });

        
            new Vue({
                el:"#app",
                data:{
                    count:1
                }
            })
    </script>
</body>
</html>

单个组件 :
在这里插入图片描述

其中这部分是对于组件的全局抽取、使用的代码:

使用代码&全局抽取代码
注意:对于抽取的data部分:这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响

//使用代码
  <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
         <counter></counter>
、、抽取代码
 <script>
        /* 将点击增加数量的功能抽取成一个组件 */
        //1、全局声明注册一个组件
        Vue.component("counter",{
            template:` <button v-on:click="count++">我被点击了{{count}}次</button>`,
            data(){  //这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响所有重复的组件
                return {
                    count:1
                }
            }
        });

        
         
    </script>

组件被多次重复使用之后的效果
在这里插入图片描述

 组件其实也是一个 Vue 实例, 因此它在定义时也会接收: data、 methods、 生命周期函
数等
 不同的是组件不会与页面的元素绑定, 否则就无法复用了, 因此没有 el 属性。
 但是组件渲染需要 html 模板, 所以增加了 template 属性, 值就是 HTML 模板
 全局组件定义完毕, 任何 vue 实例都可以直接在 HTML 中通过组件名称来使用组件了
 data 必须是一个函数, 不再是一个对象。
因为导出的组件也是一个Vue实例,所以Vue中可以写的那些watch、computed都可以在导出的组件中写这些内容。
再次注意:组件的 data 属性必须是函数!一个组件的 data 选项必须是一个函数, 因此每个实例可以维护一份被返回对象的独立的拷
贝;因为这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的data{count:1} 来返回,因为之前这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响所有重复的组件的计数。

2.2、组件的复用-局部组件

一旦全局注册, 就意味着即便以后你不再使用这个组件, 它依然会随着 Vue 的加载而加载。
因此, 对于一些并不频繁使用的组件, 我们会采用局部注册;

示例
我们先在外部定义一个对象, 结构与创建全局组件时传递的第二个参数一致:
(一)我们先局部声明一个组件

<script>
        //2、局部声明一个组件;这个需要在想要使用的Vue中的components中去声明;
        const buttonCounter={
            template:` <button v-on:click="count++">我被点击了{{count}}次~~~</button>`,
            data(){ //这里需要是以函数的形式对于每个使用的地方都抽取成了一个新的对象,不能以之前的{} 来返回,这样的返回的话,如果对于一个页面,则会都使用了一个data了。会互相影响
                return {
                    count:1
                }
            }
        }
  </script>

(二)然后再在下面的Vue实例中组件属性中去注册他

<script>
  new Vue({
                el:"#app",
                data:{
                    count:1
                },
                components:{
                   'button-counter' :buttonCounter   //注册上面局部组件后才能使用
                }
            })
</script>

(三)在Html的div中使用

在这里插入图片描述
使用效果:
在这里插入图片描述


http://www.kler.cn/news/342766.html

相关文章:

  • 无人驾驶打造“新丝路”,驭势科技在卡塔尔设立研发运营中心
  • 318页PPT5G智慧校园顶层设计方案
  • Spring Boot 事务管理入门
  • 深度学习--------------------------------使用注意力机制的seq2seq
  • 服装生产管理:SpringBoot框架的高效策略
  • [git] github管理项目之环境依赖管理
  • 数据结构前置知识(下)
  • java-07 多线程-并发编程(线程池,线程状态)
  • 程序设计基础I-实验7 函数(编程题)
  • 邮件营销与社交媒体结合:打造全方位营销!
  • ESP8266模块(WIFI STM32)
  • 数据结构之二叉搜索树(key模型与key_value模型)
  • 使用OpenFeing远程调用时为方法添加请求头
  • 掌握 C# 设计模式:从基础到依赖注入
  • Django学习笔记七:用户认证与授权
  • C语言-常见文件操作函数详解(fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite)
  • C++与Rust那些事之跳过析构函数
  • 杨中科 ASP.NETCORE 异步编程二
  • 【golang】gorm 使用map实现in 条件查询用法
  • 大数据面试-笔试SQL