Vue 2 组件基础

news2024/9/23 15:31:06

一个简单的组件示例:

<!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="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <button-counter></button-counter>
    </div>
    <script>
        Vue.component('button-counter', {
            template: `<button v-on:click="addCount">你点击了我{{count}}次</button>`,
            data() {
                return {
                    count: 0
                }
            },
            methods: {
                addCount() {
                    this.count++;
                }
            },
        })
        var app = new Vue({
            el: '#app',
        })
    </script>
</body>

</html>
  • 组件是可任意次数复用的Vue实例,所以它与new Vue接收相同选项,但是data必须是一个函数,以确保不同组件不会共享数据。
  • Vue.component用于全局注册一个组件。
  • 每个组件必需有且只有一个根元素。
  • 全局注册组件必须在vue实例化之前,否则组件注册不成功。

使用事件抛出值—>子组件传值给父元素

主要是$emit$event

//在子组件里使用 @eventName="$emit('customeEventName',thrown value)"

//在父组件里,如果下面是使用表达式,则可以通过 $event 获取 thrown value;如果使用函数的话,则该函数的第一个参数为 thrown value
<child-component @customeEventName="JS statement or a function"></child-component>

使用prop向子组件传值—>父组件传值给子组件

注册子组件

Vue.component("child-component",{
    //定义prop
    props:['propName'],
    template:`...`
})

传值给定义的prop

<child-component propName="字符串"></child-component>

如果prop绑定的是动态值(比如data里的数据)那么就使用v-bind绑定

<child-component v-bind:propName="动态值"></child-component>

在组件上使用v-model

最常见的:

<input v-model="inputText">

它等价于:

<input v-bind:value="inputText" v-on:input="inputText=$event.target.value">

如果是自定义组件,如custom-input:

<custom-input v-bind:value="inputText" v-on:input="inputText=$event"></custom-input>

v-bind:value="inputText"实现了inputText改变,value改变

v-on:input="inputText=$event"实现了value改变,inputText改变


简单了解通过插槽分发内容

插槽用于将组件将内容分发到特定位置,换句话说,允许你在父组件中传递内容到子组件,并且子组件可以决定如何显示这些内容。

假如有一个custom-button组件,我们希望可以自定义其名称。

Vue.component('custom-button',{
    template:
    `
    <button>
    <slot></slot>
  	</button>
    `
})

然后我们可以在父组件中这样传递内容:

<custom-button>
  Click me!
</custom-button>

Click me!就会被插入到slot的位置。


初步了解动态组件

动态组件值在一个挂载点可以切换多个组件,类似于tab页的切换。

Vue使用<component>元素加上is attribute来实现动态组件,is可绑定的值包括已注册组件名或一个组件的选项对象。

一个动态组件的例子如下:

<!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="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <button @click="type=type==='first'?'second':'first'">{{type}}</button>
        <component :is="type"></component>
    </div>
    <script>
        Vue.component('first', {
            template: 
            `<div>
                <h1>1</h1>
            </div>`,
        })
        Vue.component('second', {
            template:
            `<div>
                <h1>2</h1>
            </div>`,
        })
        var app = new Vue({
            el: '#app',
            data: {
                type: 'first'
            }
        })
    </script>
</body>

</html>

解析DOM模板时的注意事项

ul、ol、table、select这些元素只允许某些特定的元素出现在其内部,

如果像下面这样

<table>
   	<child-component></child-component>
</table>

则会导致渲染出错

比如下面

<div id="app">
    <table>
        <demo></demo>
    </table>
</div>
<script>
    Vue.component('demo', {
        template: 
        `<div>
            <h1>demo</h1>
        </div>`,
    })
    var app = new Vue({
        el: '#app',
        data: {
            type: 'demo'
        }
    })
</script>

虽然显示结果与我们预期的一样,但是F12查看发现,demo组件内容被提到了table元素的上面:

在这里插入图片描述

对于这种情况,我们可以使用前文动态组件中介绍的is属性来解决:

<table>
    <tr :is="type"></tr>
</table>

在这里插入图片描述

需要注意的是如果我们从以下来源使用模板的话,这条限制是不存在的:

  • 字符串 (例如:template: '...')
  • 单文件组件 (.vue)
  • <script type="text/x-template">

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

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

相关文章

暴力模拟入门+简单:零件组装、塔子的签到题、塔子哥考试、平均像素值、换座位

暴力模拟入门 P1038 小红书-2022.9.23-零件组装 #include <bits/stdc.h> #include <cstdint> using namespace std;typedef long long LL; const int N 100001; int num[4]; LL d; vector<vector<LL>> v(4, vector<LL>(N));int main() {for(in…

python中的__name__是个啥?

pycharm中随便打开一个文件&#xff0c;在special variables中能看到一个__name__的变量 在很多python脚本中&#xff0c;也经常能看到if name "main"这样一行 所以_name_到底是个啥&#xff1f; 首先&#xff0c;我们可以确定这是一个str字符变量 “在 Python 中&…

06_布隆过滤器BloomFilter

06——布隆过滤器BloomFilter 一、是什么 由一个初始值都为零的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素 设计思想&#xff1a; 1. 目的&#xff1a;减少内存占用 1. 方式&#xff1a;不保存数据信息&#xff0c;只是在内存中做一个是否存…

【框架类】—MVVM框架

一、MVVM框架有哪些 Vue.jsReact.jsAngular.js 二、对MVVM的认识 1. MVC是什么 全称 Model View Controller, 它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离 2. MVVM的定义 MVVM是一种软件架构模式&#xff0c;它代表了模型 --视…

智慧工地监管一体化云平台源码 PC端、 手机端、 现场端

智慧工地管理平台是以物联网、移动互联网技术为基础&#xff0c;充分应用大数据、人工智能、移动通讯、云计算等信息技术&#xff0c;利用前端信息采通过人机交互、感知、决策、执行和反馈等&#xff0c;实现对工程项目內人员、车辆、安全、设备、材料等的智能化管理&#xff0…

Python 潮流周刊#16:优雅重要么?如何写出 Pythonic 的代码?

你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。标题取自其中两则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。 本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选…

Linux(入门篇)

Linux&#xff08;入门篇&#xff09; Linux概述Linux是什么Linux的诞生Linux和Unix的渊源GNU/LinuxLinux的发行版Linux VS Windows Linux概述 Linux是什么 Linux是一个操作系统(OS) Linux的诞生 作者&#xff1a;李纳斯托瓦兹&#xff08;git也是他开发的&#x1f602;&am…

11. 实现业务功能--获取用户信息

目录 1. 实现 Controller 2. 单体测试 3. 修复返回值存在的缺陷 3.1 用户的隐私数据&#xff1a;密码的密文和盐不能显示 3.2 将值为 null 的字段可以进行过滤 3.3 时间的格式需要进行处理&#xff0c;如 yyyy-mmmm-ddd HH:mm:ss 3.4 data 属性没有返回 4. 实现前端页…

低代码平台全套源码,支持二次开发

低代码开发平台&#xff1a;只需要编写简单的配置文件即可构建企业级应用程序。 一、低代码PaaS平台可以在云端开发、部署、运行低代码应用程序。使用独立数据库模型&#xff0c;基于Kubernetes云原生技术&#xff0c;每个租户均可拥有一套独立的存储、数据库、代码和命名空间&…

光栅化之扫描填充三角形

重心坐标计算 重心坐标比较简单&#xff0c;取最大包围合再计算点是否在三角形内就行&#xff0c;再根据重心坐标返回的alpha,beta,gamma三个权重值计算 uv映射和depth深度缓冲值&#xff0c;因为是求的重心坐标&#xff0c;感觉效果比插值的要好一点。 求重心坐标 barycentr…

Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

bit7z一个c静态库&#xff0c;为7-zip共享库提供了一个干净简单的接口 使用CMAKE重新编译github上的bit7z库&#xff0c;用来解压/预览iso9660&#xff0c;WIm&#xff0c;Zip,Rar等常用的压缩文件格式。z-zip库支持大多数压缩文件格式 导读 编译bit7z(C版本)使用mscv 2017编译…

C# 把dll打包到exe文件,真的可以 。文件批量转了ANSI编码

在 C# 中&#xff0c;将 DLL 文件打包到 EXE 文件中可以使用 ILRepack 工具。ILRepack 是一个开源的工具&#xff0c;可以合并多个 DLL 文件并将它们嵌入到一个 EXE 文件中&#xff0c;从而实现将 DLL 打包到 EXE 的功能。 以下是使用 ILRepack 工具打包 DLL 到 EXE 的步骤&…

CSDN今日热榜词云图

文章目录 C云原生人工智能和Python前沿技术软件工程后端javajavascriptphp区块链大数据移动开发嵌入式开发工具数据结构与算法微软技术测试游戏网络运维 C C果然还是应试语言&#xff0c;真题的占比竟然这么大。C之所以没出现&#xff0c;很有可能是在做词云的时候把加号当作非…

多人联机对战游戏赛道,你准备好了吗?

用户日益增长的精神需求和社交娱乐需要&#xff0c;让联机对战的需求与日剧增。 硬件和网络技术的高速发展&#xff0c;也使得联机游戏的体验越来越好。 可以看到&#xff0c;越来越多的联机对战游戏登上游戏榜单。 联机对战已逐渐成为主流&#xff0c;无论在哪个游戏榜单&…

二,MySQL数据库主从复制的介绍及搭建(收藏)

一&#xff0c;介绍概述 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 DDL&#xff1a;数据定义语言&#xff0c;用…

HRS--人力资源系统(Springboot+vue)--打基础升级--(二)写个主菜单导航界面

1. 华为OD机考题 答案 2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09; 2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 2. 面试题 一手真实java面试题&#xff1a;2023年各大公司java面试真题汇总--…

计算机 数进制转换;存储MB与带宽Mbps

参考&#xff1a;https://zhuanlan.zhihu.com/p/459817484 1、计算机 数进制转换 1&#xff09;与十进制相关的转换 2&#xff09;与二进制相关的转换 二进制是Binary&#xff0c;简写为B&#xff1b;八进制是Octal&#xff0c;简写为O&#xff1b;十进制是Decimal&#xff…

117页数字化转型与产业互联网发展趋势及机会分析报告PPT

导读&#xff1a;原文《》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以点赞评论转发本文&#xff0c;了解更多内容请私信&#xff1a;方…

Ubuntu16.04-ros-kinetic环境搭建笔记=1=

tips&#xff1a;搬运资料&#xff0c;留个记录 安装Ubuntu Ubuntu官网下载地址 安装 虚拟机安装Ubuntu 最好断网安装Ubuntu&#xff0c;可以节约时间 Ubuntu基础设置 Ubuntu换国内源 换成清华源 sudo apt upgradeVMwareTool安装 把这个压缩包拖到桌面&#xff0c;否则只读…