Vue基础(二)

news2024/10/7 8:28:32

Vue组件

组件化是Vue.js中的重要思想
它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。
任何的应用都会被抽象成一颗组件树。

注册组件

<body>
<div id="app">
<!--3、使用组件-->
    <my-cpn></my-cpn>
</div>
</body>
<script>
    //1、创建组件构造器
    const myComponent = Vue.extend({
        template:`
        <div>
            <h2>组件标题</h2>
            <p>组件的一个段落</p>
        </div>
        `
    });
    //2、注册组件,定义组件标签名称
    Vue.component('my-cpn',myComponent)

    var app = new Vue({
        el: '#app',
        data: {

        }
    })
</script>

如下图:
在这里插入图片描述

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

2.Vue.component(): 调用Vue.component()是将刚才的组件构造器注册为一个组件,并且给它起一个组件的标签名称。
所以需要传递两个参数:1、注册组件的标签名 2、组件构造器
3.组件必须挂载在某个Vue实例下,否则它不会生效。

全局组件和局部组件

全局组件

<body>
<div id="app">
<!--3、使用组件-->
    <my-cpn></my-cpn>
</div>
<div id="app1">
    <!--3、使用组件-->
    <my-cpn></my-cpn>
</div>
</body>
<script>
    //1、创建组件构造器
    const myComponent = Vue.extend({
        template:`
        <div>
            <h2>组件标题</h2>
            <p>组件的一个段落</p>
        </div>
        `
    });
    //2、注册组件,定义组件标签名称(注册全局组件)
    Vue.component('my-cpn',myComponent)

    var app = new Vue({
        el: '#app',
        data: {

        }
    })
    var app1 = new Vue({
        el: '#app1',
        data: {

        }
    })
</script>

如下图:
在这里插入图片描述

局部组件

<body>
<div id="app">
<!--3、使用组件-->
    <p>Vue实例app</p>
    <my-cpn></my-cpn>
</div>
<div id="app1">
    <!--3、使用组件-->
    <p>Vue实例app1</p>
    <my-cpn></my-cpn>
</div>
</body>
<script>
    //1、创建组件构造器
    const myComponent = Vue.extend({
        template:`
        <div>
            <h2>组件标题</h2>
            <p>组件的一个段落</p>
        </div>
        `
    });
    var app = new Vue({
        el: '#app',
        //组件局部注册
        components: {
          'my-cpn':myComponent
        },
        data: {

        }
    })
    var app1 = new Vue({
        el: '#app1',
        data: {

        }
    })
</script>

在这里插入图片描述

父组件和子组件

</body>
<script>
    //1、创建组件构造器
    const childComponent = Vue.extend({
        template:`
        <div>
            <h2>child组件标题</h2>
            <p>组件的一个段落</p>
        </div>
        `
    });
    //1、创建组件构造器
    const myComponent = Vue.extend({
        template:`
        <div>
            <h2>组件标题</h2>
            <p>组件的一个段落</p>
            <child-cpn/>
        </div>
        `,
        components:{
            //子组件
            'child-cpn':childComponent
        }
    });

    var app = new Vue({
        el: '#app',
        //组件局部注册
        components: {
          //  父组件
          'my-cpn':myComponent
        },
        data: {

        }
    })
</script>

如下图:
在这里插入图片描述

注册组件语法糖

<body>
<div id="app">
    <p>Vue实例app</p>
    <my-cpn></my-cpn>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        components: {
            'my-cpn': {
                template: '<div>组件my-cpn</div>'
            },
            'child-cpn': {
                template: '<div>组件child-cpn</div>'
            }
        },
        data: {}
    })
</script>

模板分离写法

使用 template标签

</body>
<template id="myComponent">
    <div>
        <p>myComponent组件</p>
    </div>
</template>

<script>
    var app = new Vue({
        el: '#app',
        components: {
            'my-cpn': {
                template: '#myComponent'
            }
        },
        data: {}
    })
</script>

组件数据存放

</body>
<template id="myComponent">
    <div>
        <p>myComponent组件</p>
        {{message}}
        {{count}}
        <button @click="add">add</button>
    </div>
</template>

<script>
    var app = new Vue({
        el: '#app',
        components: {
            'my-cpn': {
                template: '#myComponent',
                data() {
                    return {
                        message : '组件数据message',
                        count : 0
                    }
                },
                methods : {
                    add(){
                        this.count ++
                    }
                }
            }
        }
    })
</script>

如下图:
在这里插入图片描述

子父组件通信

如何进行父子组件间的通信呢?
Vue官方提到1、通过props向子组件传递数据2、通过事件向父组件发送消息

父组件向子组件传递数据–props用法

props的值有两种方式
方式一:字符串数组,数组中的字符串就是传递时的名称。
方式二:对象,对象可以设置传递时的类型,也可以设置默认值等。
字符串数组

<body>
<div id="app">
    <p>Vue实例app</p>
<!--动态绑定属性-->
    <my-cpn :message="message" :name="name" :age="age"></my-cpn>
</div>
</body>
<template id="myComponent">
    <div>
        <p>myComponent组件</p>
        {{message}} --{{name}}--{{age}}
    </div>
</template>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            message : 'hello world',
            name : 'zhangsan',
            age : 11
        },
        components: {
            'my-cpn': {
                template: '#myComponent',
                props:['message','name','age']
            }
        }
    })
</script>

如下图:
在这里插入图片描述

对象
对props进行类型等验证时,就需要对象写法

</body>
<template id="myComponent">
    <div>
        <p>myComponent组件</p>
        {{message}} --{{name}}--{{age}}
    </div>
</template>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello world',
            name: 'zhangsan',
            age: 11
        },
        components: {
            'my-cpn': {
                template: '#myComponent',
                props: {
                    message: {
                        type: String,
                        default: 'message'
                    },
                    name: {
                        type: String,
                        default: 'zhangsan'
                    },
                    age: {
                        type: Number,
                        default: 10
                    }
                }
            }
        }
    })
</script>

子组件向父组件传值

通过自定义事件来完成该操作
e m i t 用法: v m . emit用法: vm. emit用法:vm.emit( event, arg ) //触发当前实例上的事件 arg为参数

</body>
<template id="myComponent">
    <div>
        <button @click="add">+</button>
        <button @click="del">-</button>
    </div>
</template>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            total: 0
        },
        methods: {
          getTotal(count){
              this.total = count
          }
        },
        components: {
            'my-cpn': {
                template: '#myComponent',
                data(){
                  return {
                      count : 0
                  }
                },
                methods :{
                    add(){
                        this.count ++
                        this.$emit('add',this.count)
                    },
                    del(){
                        this.count --
                        this.$emit('del',this.count)
                    }
                }
            }
        }
    })
</script>

如下图:
在这里插入图片描述

父子组件访问

$refs
<body>
<div id="app">
    <p>Vue实例app</p>
    {{message}}
    <button @click="getMessage">点击获取子组件message</button>
    <my-cpn ref="myComponent"></my-cpn>
</div>
</body>
<template id="myComponent" >
    <div>
        <p>myComponent组件</p>
        {{message}}
    </div>
</template>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello world'
        },
        methods: {
            getMessage(){
                this.message = this.$refs.myComponent.message
            }
        },
        components: {
            'my-cpn': {
                template: '#myComponent',
                data(){
                    return {
                        message:'hello abc'
                    }
                }
            }
        }
    })
</script>

如下图:
在这里插入图片描述

$children
<body>
<div id="app">
    <my-cpn></my-cpn>
</div>
</body>
<template id="myComponent" >
    <div>
        <p>myComponent组件</p>
        {{message}}
        <button @click="change">获取子组件message</button>
        <child-cpn></child-cpn>
    </div>
</template>
<template id="childComponent" >
    <div>
        <p>childComponent</p>
        {{message}}
    </div>
</template>
<script>
    var app = new Vue({
        el: '#app',
        components: {
            'my-cpn': {
                template: '#myComponent',
                data(){
                    return {
                        message:'parent'
                    }
                },
                methods: {
                    change(){
                        this.message = this.$children[0].message
                    }
                },
                components: {
                    'child-cpn' :{
                        template: '#childComponent',
                        data(){
                            return {
                                message:'child'
                            }
                        }
                    }
                }
            },
        }
    })
</script>

如下图:
在这里插入图片描述

子组件访问父组件

$parent
<body>
<div id="app">
    <my-cpn></my-cpn>
</div>
</body>
<template id="myComponent" >
    <div>
        <p>myComponent组件</p>
        {{message}}
        <child-cpn></child-cpn>
    </div>
</template>
<template id="childComponent" >
    <div>
        <p>childComponent</p>
        {{message}}
        <button @click="change">获取父组件message</button>
    </div>
</template>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello world'
        },
        methods: {
            getMessage(){
                this.message = this.$refs.myComponent.message
            }
        },
        components: {
            'my-cpn': {
                template: '#myComponent',
                data(){
                    return {
                        message:'parent'
                    }
                },
                components: {
                    'child-cpn' :{
                        template: '#childComponent',
                        data(){
                            return {
                                message:'child'
                            }
                        },
                        methods: {
                            change(){
                                this.message = this.$parent.message
                            }
                        }
                    }
                }
            },
        }
    })
</script>

如下图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言小游戏——猜数字

猜数字游戏是一种简单而有趣的游戏&#xff0c;玩家需要根据提示猜出一个随机数。 //游戏菜单 void menu() {printf("*********************\n");printf("* 1.play *\n");printf("* 0.exit *\n");printf("********…

一道北大强基题背后的故事(五)——解数学题的数学模型是什么?

早点关注我&#xff0c;精彩不错过&#xff01; 上回说到&#xff0c;数学之美&#xff0c;美在作为一个工具的通用性&#xff0c;艺术追求和思维游戏&#xff0c;相关内容请戳&#xff1a; 一道北大强基题背后的故事&#xff08;四&#xff09;——数学之美&#xff0c;美在哪…

详解sentinel使用

目录 1.概述 2.下载安装 3.应用托管 4.流量控制 4.1.流控规则 4.2.流控模式 4.2.1.直接模式 4.2.2.关联模式 4.2.3.链路模式 4.3.流控效果 4.3.1.预热 4.3.2.排队等待 5.降级 5.1.降级规则 5.2.降级策略 5.2.1.RT 5.2.2.异常比例 5.2.3.异常数 1.概述 senti…

CentOS7设置nginx服务开机自启【开机自启】

方法一&#xff1a;使用Systemd 1.创建服务单元文件 sudo vi /etc/systemd/system/nginx.service2.编辑配置文件 [Unit] DescriptionThe NGINX HTTP and reverse proxy server Aftersyslog.target network.target[Service] Typeforking ExecStartPre/usr/sbin/nginx -t Exec…

[数据结构初阶]双链表

目录 双链表定义 初始化 创建节点 尾插 ​编辑 尾删 头插 头删 打印 查找 pos插入 头插复用 尾插复用 pos删除 头删复用 尾删复用 判空 size 销毁 完整代码 前面我们学习了单链表&#xff0c;但按照带头不带头(哨兵)和循环不循环我们可以有四种单链表&#…

知识蒸馏学习记录

最近在学习降噪处理不良天气的算法过程中&#xff0c;接触到了知识蒸馏&#xff0c;该算法作为一个深度学习通用算法&#xff0c;不仅广泛应用在自然语言处理方面&#xff0c;在计算机视觉等领域也广受追捧。 概要 简单来说&#xff0c;知识蒸馏就是将一个大的教师网络萃取到…

Nginx虚拟机主机

Nginx虚拟机主机 简述 虚拟主机是一种特殊软硬件技术&#xff0c;将网络上每一台计算机分成多个虚拟主机&#xff0c;每个虚拟主机可独立对外提供www服务&#xff0c;实现一台主机对外提供多个web服务&#xff0c;每个虚拟主机之间独立&#xff0c;互不影响。 配置位置 既可以在…

基于深度学习的高精度塑料瓶检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度塑料瓶检测识别系统可用于日常生活中或野外来检测与定位塑料瓶目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的塑料瓶目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

自动化面试题5

一、Modbus通信485/232/422的优缺点。 &#xff08;1&#xff09;RS232和RS422是全双工的&#xff0c;RS485是半双工的。 &#xff08;2&#xff09;RS485与RS232仅仅是通讯的物理协议&#xff08;即接口标准&#xff09;有区别&#xff0c;RS485是差分传输方式&#xff0c;R…

Spring6 AOT 提前编译

文章目录 1、AOT概述1.1、JIT与AOT的区别1.2、Graalvm1.3、Native Image 2、Native Image构建过程2.1、GraalVM安装&#xff08;1&#xff09;下载GraalVM&#xff08;2&#xff09;配置环境变量&#xff08;3&#xff09;安装native-image插件 2.2、安装C的编译环境&#xff0…

法规标准-ISO 23374标准解读

ISO 23374是做什么的&#xff1f; ISO 23374全名为智能交通系统-自动代客泊车系统(AVPS) 第一部分&#xff1a;系统框架、自动驾驶要求和通信接口&#xff0c;针对AVPS的系统框架及功能要求、通信接口进行介绍&#xff0c;由于通信接口涉及功能实现&#xff0c;但此处介绍较为…

ubuntu20.04 磁盘故障,然后重装22.04

ubuntu20.04 磁盘故障&#xff0c;然后重装22.04 重装原因开机自启动不需要使用sudo 软件截图 flameshot输入法 fcitx5 重装原因 编译程序报错 /usr/include/x86_64-linux-gnu/bits/signum.h:26:10: fatal error: /usr/include/x86_64-linux-gnu/bits/signum-generic.h: 结构需…

VUE L ∠脚手架 配置代理 ⑩⑧

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs初识 V u e C L I VueCLI VueCLI C L I CLI CLI V u e Vue Vue配置代理 C L I CLI CLI配置方法一 C L I CLI CLI配置方法二 C L I CLI CLI V u …

经典文献阅读之--VIP-SLAM(紧耦合RGB-D视觉惯性平面SLAM)

0. 简介 现有的视觉SLAM很多的算法让仍然是基于特征提取的方法来完成地图的建立&#xff0c;而RGB-D传感器的算法仍然是主要基于稀疏点的SLAM系统&#xff0c;这就导致在构建稠密点云地图的时候需要保持大量的地图点来建模环境。大量的地图点给我们带来了很高的计算复杂性&…

Python 进阶(二):Python使用ORM框架peewee操作MySQL数据库

Python使用ORM框架peewee操作数据库 前言1. 安装Peewee库并初始化数据库2. 创建数据库连接3. 定义数据表模型类4. 连接数据库并创建表5. 操作数据库5.1 插入数据5.2 查询数据5.3 更新数据5.4 删除数据 6. 聚合查询 前言 本文基于MySQL8.x版本的学习&#xff0c;python版本基于…

美客多、Newegg卖家如何提高店铺销量?测评自养号的重要性

作为美客多和Newegg平台上的卖家&#xff0c;提高店铺销量是卖家取得商业成功的关键。珑哥今天来说一些有效的策略&#xff0c;帮助卖家增加销售额并提升店铺的知名度和竞争力。 优化产品页面&#xff1a; 优秀的产品页面可以吸引更多买家并促进销售。确保产品标题准确、吸引人…

经典文献阅读之--NICE-SLAM(SLAM的神经隐含可扩展编码)

0. 简介 对于深度学习而言&#xff0c;NeRF一定是最近两年最火的工作之一了&#xff0c;**NeRF&#xff08;Neural Radiance Fields&#xff09;**是最早在2020年ECCV会议上的Best Paper&#xff0c;其将隐式表达推上了一个新的高度&#xff0c;仅用 2D 的 posed images 作为监…

stm32配置基本定时功能

Clock Source参数说明 内部时钟源是由STM32F103芯片内部的RC振荡器提供的。它的频率为8MHz&#xff0c;可以通过PLL倍频器进行倍频&#xff0c;最高可达到72MHz。 Internal clock Division No Division&#xff1a;不分频&#xff0c;即系统时钟直接作为时钟信号。Divided by 2…

ModaHub AI模型社区:向量数据库CPU 版 Milvus和GPU 版 Milvus 版本比较

目录 CPU 版 Milvus 版本比较 概述 CPU 版 Milvus 支持的索引类型 浮点型向量 二值型向量 GPU 版 Milvus 版本比较 概述 GPU 版 Milvus 支持的索引类型 浮点型向量 二值型向量 CPU 版 Milvus 版本比较 概述 Milvus 提供两个发行版本&#xff1a;CPU 版本和 GPU 版本…

学生成绩管理系统(Python+数据库)

文章目录 前言MySQL部分1. 导入信息2. 演示说明 Python程序设计部分1. 连接数据库2. 登录界面3. 注册界面4. 主界面5. 查询信息6. 修改密码7. 成绩分析7.1 通过学号查询成绩7.2 通过课程号查询成绩 7. 主函数 尾声 前言 用Python和数据库一起实现了一个简单的学生成绩管理系统…