Vue学习笔记之组件基础

1、组件的定义

一般将 Vue 组件定义在一个单独的 .vue 文件中,称做单文件组件;当然也可以将组件直接定义在js文件中,如下js代码,定义一个组件BlogPost,通过props定义对外暴露属性title,父组件传递title,子组件根据title渲染html内容。

export default {props: ['title'],template: `<div class="blog-post"><h4>{{ title }}</h4></div>`
}

2、组件的使用

首先需要引用组件,语法格式import BlogPost from './BlogPost.js',然后在vue应用对象中注册组件,在components区域注册即可,最后在DOM元素内部使用标签格式,如代码<blog-post title="My jouney with Vue"></blog-post>应用子组件,并传递title属性给子组件渲染。

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app"><blog-post title="My jouney with Vue"></blog-post>
</div>
<script type="module">import BlogPost from './BlogPost.js'const { createApp } = Vue;createApp({components: {BlogPost},}).mount('#app');
</script>

3、组件的重复应用

可以使用v-for语法循环创建子组件,如代码所示:

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app"><blog-post v-for="post in posts" :key="post.id" :title="post.title"></blog-post>
</div>
<script type="module">import BlogPost from './BlogPost.js'const { createApp } = Vue;createApp({data() {return {posts: [{ id: 1, title: 'My jounery with Vue' },{ id: 2, title: 'Blogging with Vue' },{ id: 3, title: 'Why Vue is so fun' }]}},components: {BlogPost}}).mount('#app');
</script>

4、给组件传递事件

组件中模板声明一个按钮,并使用@click绑定点击事件,使用$emit抛出一个事件名为enlarge-text,并通过emits定义对外抛出的事件名称enlarge-text,定义如下代码所示:

export default {props: ['title'],emits: ['enlarge-text'],template: `<div class="blog-post"><h4>{{ title }}</h4><button @click="$emit('enlarge-text')">Enlarge text</button></div>`
}

应用组件,应用中定义字体大小属性postFontSize,在组件blog-post应用的代码处定义事件@enlarge-text="postFontSize+=0.1",点击后触发字体+0.1:

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app"><div :style="{ fontSize: postFontSize + 'em' }"><blog-post v-for="post in posts" :key="post.id" :title="post.title" @enlarge-text="postFontSize+=0.1"></blog-post></div>
</div>
<script type="module">import BlogPost from './BlogPost.js'const { createApp } = Vue;createApp({data() {return {posts: [{ id: 1, title: 'My jounery with Vue' },{ id: 2, title: 'Blogging with Vue' },{ id: 3, title: 'Why Vue is so fun' }],postFontSize:1}},components: {BlogPost},mounted() {}}).mount('#app');
</script>

5、插槽的应用

在组件中定义一个插槽,模板中语法<slot/>,

export default {template: `<div class="alert-box"><strong>This is an Error for Demo Purpose</strong><slot/></div>`
}

在vue应用中给插槽传递html内容,alert-box元素中的内容“Something bad happened.”将传递给组件的插槽:

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app"><alert-box>Something bad happened.</alert-box><table><tr><td>123</td><td>456</td></tr><tr is="vue:alert-box"></tr></table>
</div>
<script type="module">import AlertBox from './AlertBox.js'const { createApp } = Vue;createApp({data() {return {}},components: {AlertBox}}).mount('#app');
</script>

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线JSON转SQL工具

在线JSON转SQL - BTool在线工具软件&#xff0c;为开发者提供方便。在线JSON转SQL工具可以将JSON文件中的数据或者JSON对象转换为SQL插入语句&#xff0c;方便用户将数据导入到数据库中。用户可以通过简单的界面上传JSON文件&#xff0c;或者文本框输入&#xff0c;点击JSON转S…

嵌入式中经典面试题分析

1.关键字static的作用是什么&#xff1f;为什么static变量只初始化一次&#xff1f; 1&#xff09;修饰局部变量&#xff1a;使得变量变成静态变量&#xff0c;存储在静态区&#xff0c;存储在静态区的数据周期和程序相同&#xff0c; 在main函数开始前初始化&#xff0c;在退…

牛客网-------------------------长方体

解题思路&#xff1a; 设棱长为x&#xff0c;y&#xff0c;z&#xff1b;假设已知面积为a&#xff0c;b&#xff0c;c 那么&#xff0c;xya&#xff1b;yzb&#xff1b;xzc&#xff1b; 一式除二式得x/za/b x(a/b)*z 联立xzc 代入得&#xff08;a/b)z^2c z^2c*b/a z根号下&…

sql相关子查询

1.什么是相关子查询 相关子查询是一个嵌套在外部查询中的查询&#xff0c;它使用了外部查询的某些值。每当外部查询处理一行数据时&#xff0c;相关子查询就会针对那行数据执行一次&#xff0c;因此它的结果可以依赖于外部查询中正在处理的行。 2.为什么要使用相关子…

【axios报错异常】: Uncaught ReferenceError: axios is not defined

问题描述: 当前代码在vivo手机和小米手机运行是正常的,点击分享按钮调出相关弹框,发送接口进行分享,但是现在oppo手机出现了问题: 点击分享按钮没有反应. 问题解析: 安卓同事经过查询后,发现打印了错误: 但是不清楚这个问题是安卓端造成的还是前端造成的,大家都不清楚. 问题…

C++后端开发之Sylar学习二:配置VSCode远程连接Ubuntu开发

C后端开发之Sylar学习二&#xff1a;配置VSCode远程连接Ubuntu开发 没错&#xff0c;我不能像大佬那样直接在Ubuntu上面用Vim手搓代码&#xff0c;只能在本地配置一下VSCode远程连接Ubuntu进行开发咯&#xff01; 本篇主要是讲解了VSCode如何配置ssh连接Ubuntu&#xff0c;还有…

Jenkins升级后,构建任务配置界面重复错位

最近我把公司的Jenkins服务升级到了最新版本&#xff0c;升级完成后&#xff0c;点了一下构建任务&#xff0c;发现能够构建成功&#xff0c;就以为顺利完成升级了&#xff0c;下班走了&#xff0c;结果第二天&#xff0c;进入构建任务配置界面发现&#xff0c;界面一团乱麻&am…

云计算关键技术

目录 一、云计算关键技术概述 1.1 概述 二、关键技术内容 2.1 虚拟化技术 2.2 分布式数据存储技术 2.3 资源管理技术 2.4 云计算平台管理技术 2.5 多租户隔离技术 2.5.1 多租户技术下SaaS 特征 2.5.2 多租户技术面临的技术难题 2.5.2.1 数据隔离 2.5.2.2 客户化配置…

苹果公司宣布,为Apple Vision Pro打造了超过600款新应用

深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领域的领跑者。点击订阅&#xff0c;与未来同行&#xff01; 订阅&#xff1a;https://rengongzhineng.io/ 。 2月…

Tomcat组件架构与数据流

一、背景与简介 Tomcat我们都知道是一个开源的、实现了大部分Java EE、Servlet、JSP规范的Servlet容器, 允许我们将实现了Serlvet接口的Web程序war包进行部署运行。 但是你有对Tomcat做过细致的学习么? 我相信大部分同学和我一样&#xff0c;之前也是只会进行简单使用&#x…

幻兽帕鲁一键迁移到服务器,本地迁移存档后为什么又需要重新创建角色?

最近很多人在玩幻兽帕鲁的时候&#xff0c;想要把本地游戏存档迁移到服务器上继续玩&#xff0c;有些朋友却发现通过阿里云或者腾讯云上的一键迁移导入之后&#xff0c;进入游戏后发现又要重头开始玩。 这是为什么呢&#xff1f;其中可能的原因&#xff0c;我想就是因为它们的一…

npm---设置淘宝镜像时报“certificate has expired“的错误

今天使用vue create my-app 创建项目时&#xff0c;竟然报错&#xff1a; Error: Command failed: npm info vue-cli-version-marker --json --registryhttps://registry.npm.taobao.org npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request t…