首页 > 其他分享 >Vue3 组件基础:轻松掌握前端开发新技能!

Vue3 组件基础:轻松掌握前端开发新技能!

时间:2023-09-26 11:31:53浏览次数:74  
标签:Vue title app 新技能 prop 实例 Vue3 组件 前端开发

Vue3 组件基础:轻松掌握前端开发新技能!_自定义

基本实例

这里有一个 Vue 组件的示例:

// 创建一个Vue 应用
const app = Vue.createApp({})

// 定义一个名为 button-counter 的新全局组件
app.component('button-counter', {
  data() {
    return {
      count: 0
    }
  },
  template: `
    <button @click="count++">
      You clicked me {{ count }} times.
    </button>`
})

INFO

在这里演示的是一个简单的示例,但是在典型的 Vue 应用程序中,我们使用单个文件组件而不是字符串模板。你可以在本节找到有关它们的更多信息。

组件是可复用的组件实例,且带有一个名字:在这个例子中是 <button-counter>。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用:

<div id="components-demo">
  <button-counter></button-counter>
</div>
app.mount('#components-demo')

因为组件是可复用的组件实例,所以它们与 new Vue 接收相同的选项,例如 datacomputedwatchmethods 以及生命周期钩子等。仅有的例外是像 el 这样根实例特有的选项。

组件的复用

你可以将组件进行任意次数的复用:

<div id="components-demo">
  <button-counter></button-counter>
  <button-counter></button-counter>
  <button-counter></button-counter>
</div>

注意当点击按钮时,每个组件都会各自独立维护它的 count。因为你每用一次组件,就会有一个它的新实例被创建。

组件的组织

通常一个应用会以一棵嵌套的组件树的形式来组织:

Vue3 组件基础:轻松掌握前端开发新技能!_自定义_02

例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。

为了能在模板中使用,这些组件必须先注册以便 Vue 能够识别。这里有两种组件的注册类型:全局注册局部注册。至此,我们的组件都只是通过 component 全局注册的:

const app = Vue.createApp({})

app.component('my-component-name', {
  // ... 选项 ...
})

全局注册的组件可以在随后创建的 app 实例模板中使用,也包括根实例组件树中的所有子组件的模板中。

到目前为止,关于组件注册你需要了解的就这些了,如果你阅读完本页内容并掌握了它的内容,我们会推荐你再回来把组件注册读完。

通过 Prop 向子组件传递数据

早些时候,我们提到了创建一个博文组件的事情。问题是如果你不能向这个组件传递某一篇博文的标题或内容之类的我们想展示的数据的话,它是没有办法使用的。这也正是 prop 的由来。

Prop 是你可以在组件上注册的一些自定义 attribute。当一个值传递给一个 prop attribute 的时候,它就变成了那个组件实例的一个 property。为了给博文组件传递一个标题,我们可以用一个 props 选项将其包含在该组件可接受的 prop 列表中:

const app = Vue.createApp({})

app.component('blog-post', {
  props: ['title'],
  template: `<h4>{{ title }}</h4>`
})

app.mount('#blog-post-demo')

一个组件默认可以拥有任意数量的 prop,任何值都可以传递给任何 prop。在上述模板中,你会发现我们能够在组件实例中访问这个值,就像访问 data 中的值一样。

一个 prop 被注册之后,你就可以像这样把数据作为一个自定义 attribute 传递进来:

<div id="blog-post-demo" class="demo">
  <blog-post title="My journey with Vue"></blog-post>
  <blog-post title="Blogging with Vue"></blog-post>
  <blog-post title="Why Vue is so fun"></blog-post>
</div>

然而在一个典型的应用中,你可能在 data 里有一个博文的数组:

const App = {
  data() {
    return {
      posts: [
        { id: 1, title: 'My journey with Vue' },
        { id: 2, title: 'Blogging with Vue' },
        { id: 3, title: 'Why Vue is so fun' }
      ]
    }
  }
}

const app = Vue.createApp({})

app.component('blog-post', {
  props: ['title'],
  template: `<h4>{{ title }}</h4>`
})

app.mount('#blog-posts-demo')

并想要为每篇博文渲染一个组件:

<div id="blog-posts-demo">
  <blog-post
    v-for="post in posts"
    :key="post.id"
    :title="post.title"
  ></blog-post>
</div>

如上所示,你会发现我们可以使用 v-bind 来动态传递 prop。这在你一开始不清楚要渲染的具体内容,是非常有用的。

标签:Vue,title,app,新技能,prop,实例,Vue3,组件,前端开发
From: https://blog.51cto.com/u_16228250/7606084

相关文章

  • Vue3-vite 按需引入Element-plus
    1.下载unplugin-vue-components,unplugin-auto-import包npmi-Dunplugin-vue-componentsunplugin-auto-import2.vite.config.js文件中配置1importAutoImportfrom'unplugin-auto-import/vite'2importComponentsfrom'unplugin-vue-components/vite�......
  • 如何在vite+vue3中的html页面中使用变量?
    如何在vite+vue3中的html页面中使用变量?vite版本:4.1.5vue版本:3.2.47需要引入新的开发依赖:yarnaddvite-plugin-html-D修改vite.config.ts文件配置...//@ts-ignoreimport{createHtmlPlugin}from"vite-plugin-html";exportdefault({mode}:ConfigEnv):Us......
  • 使用Vue3+elementPlus的Tree组件实现一个拖拽文件夹管理
    目录1、前言2、分析3、实现4、踩坑4.1、拖拽辅助线的坑4.2、数据的坑4.3、限制拖拽4.4、样式调整1、前言最近在做一个文件夹管理的功能,要实现一个树状的文件夹面板。里面包含两种元素,文件夹以及文件。交互要求如下:创建、删除,重命名文件夹和文件可以拖拽,拖拽文件到文件夹中,或......
  • Vue3 基础 – 快速上手 & 常用指令
    1.在HTML网页中使用vue3的3个基本步骤a.通过 script 标签的 src 属性,在当前网页中全局引入vue3的脚本文件:<scriptsrc="https://unpkg.com/vue@3/dist/vue.global.js"></script>b.创建vue3的单页面应用程序实例://2.1从Vue对象中解构出createApp函数const{cre......
  • 使用SpringBoot+Vue3的形式实现管理系统的添加功能
    1、查看页面形式2、使用element-plus组件为添加页面引入form表单成功引入form表单组件:3、更改成自己需要的形式4、测试是否可以拿到文本框的数据拿到数据啦!!(记得vue3这里:console.log(form)//不要写this```)#5、vue界面的添加代码<el-form-item>......
  • Vue3 事件处理实战:让你的代码更有魅力
    监听事件我们可以使用 v-on 指令(通常缩写为 @ 符号)来监听DOM事件,并在触发事件时执行一些JavaScript。用法为 v-on:click="methodName" 或使用快捷方式 @click="methodName"例如:<divid="basic-event"><button@click="counter+=1">Add1</button>&......
  • ts和vue3的结合常见的一些问题(持续更新)
    特此注意是vue3,而不是vue2使用typescript的interface关键词定义一个存数据的数据类型interfacePosition{long:number,lnt:number,height:number}constposition=ref<Position>({long:0,lnt:0,height:0})......
  • vue3的面试题
    1.什么是Vue3?Vue3有哪些新增特性?答:Vue3是Vue.js框架的最新版本,它增加了很多新特性,包括CompositionAPI、Teleport、Suspense和Fragment等。2.Vue3CompositionAPI是什么?它的作用是什么?答:Vue3CompositionAPI是Vue3中的一个新特性,它的作用是将组件中的逻辑分解成可复用的可......
  • vue3 defineEmits的使用
    1.计数器案例父组件:<template><h2>当前计数为:{{counter}}</h2><HelloWorld@add1="add1"@decre1="decre1"></HelloWorld></template><scriptsetup>import{ref}from'vue'import......
  • vue3 将文件集合下载后导出zip文件
    //注意:文件的url一定是服务器上的地址如http:xxxx//先下载npmijszipfile-saver//封装importJSZipfrom'jszip'importFileSaverfrom'file-saver'constgetFile=(url)=>{returnnewPromise((resolve,reject)=>{//通过请求获取文件blob格式......