vue-day03 组件基础

简介: 文章介绍了Vue.js中组件的基础概念、注册格式、命名方式、全局与局部注册的区别、prop属性的详细使用以及通过prop向子组件传递数据的方法,并提供了计数器和博文小组件的实例。

组件

在vue中,组件是可复用的vue实例。通俗的来说,就是比如之前html,css中经常使用的盒模型布局,其中一个大的div即可看作一个组件,抑或是在不同的功能板块儿中,都可以看做一个组件。
在这里插入图片描述

在vue中注册组件的格式

组件的命名方式

命名方式:
在vue中注册组件的命名方式,你可以选择使用 短横线分隔命名(比较推荐),也可以使用首字母大写(类似java中的命名方式)。 强烈推荐 短横线分隔。

全局注册

Vue.component('blog-bar',{
   
        props:['title','content'],
        template:`<div><h1>{
    {title}}</h1><br><span>{
    {content}}</span></div>`
});

在props属性中,可以自定义组件的封装属性。然后在template中,使用模板字符串来创建你想要的组件的格式,注意需要使用一些标签作为根标签进行包裹,否则会一些标签会丢失。

局部注册

let app2 = new Vue({
   
        el:"#app2",
        data:{
   },
        components:{
   
            "blog-post":{
   
                props:['title'],
                template:'<h3>{
   {title}}</h3>'
            }
        }
    })

在vue实例中的components属性里面来注册组件,其语法与全局注册基本类似。

全局注册VS局部注册

全局注册就是 Vue.component 这样会导致我们在一些项目中,加载很多不必要的组件,造成了资源的浪费,局部注册的话就是 在自己创建vue的实例中来注册组件.
注意局部注册的组件在其子组件中不可用。如果想在别的组件中使用另一个局部注册的组件,那么你就在别的组件里面注册就行.可以采用下面的方式:

let app3 = new Vue({
   
   el:'#app3',
    component:{
   
        testA:{
   
            data:{
   }
            template:'<p>我是局部组件testA</p>'
        }
    }
});

prop属性详细介绍

通过prop向子组件传递数据

在组件中添加props属性可以传递值 比如一个组件用来传递你的博文名称…
在自定义组件中,可以自己添加一些属性 也是通过props来添加,然后传递数据的话就直接{ {}}即可。

let app2 = new Vue({
   
        el:"#app2",
        data:{
   },
        components:{
   
            "blog-post":{
   
                props:['title'],
                template:'<h3>{
   {title}}</h3>'
            }
        }
    })

props以字符串数组形式的,没有默认值类型—所以你可以灵活的使用v-bind指令来将其绑定数据.props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
但我们通常,为了严谨,所以你应该给每一个prop都指定具体的数据类型(值类型)so 如下:

                props:{
                  title: String,
                  likes: Number,
                  isPublished: Boolean,
                  commentIds: Array,
                  author: Object,
                  callback: Function,
                  contactsPromise: Promise
                }

这样的话会有一个好处,当你提供了默认类型后,浏览器的控制台里面就会提示。(注意,如果提供默认类型的话,则props不能再使用[]而是使用{}).
同理,你也可以对prop添加计算属性进行一些原始数据的转换.比如字符串分隔。。。根据需求来。
然后 是有一个组件认证 —这些你都先可以想想,框架一定为我们提供了什么功能,然后就一看就懂了

   props: {
          // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
          propA: Number,
          // 多个可能的类型
          propB: [String, Number],
          // 必填的字符串
          propC: {
            type: String,
            required: true
          },
          // 带有默认值的数字
          propD: {
            type: Number,
            default: 100
          },
          // 带有默认值的对象
          propE: {
            type: Object,
            // 对象或数组默认值必须从一个工厂函数获取
            default: function () {
              return { message: 'hello' }
            }
          },
          // 自定义验证函数
          propF: {
            validator: function (value) {
              // 这个值必须匹配下列字符串中的一个
              return ['success', 'warning', 'danger'].indexOf(value) !== -1
            }
      }

禁用组件继承:
在组件中添加 inheritAttrs: false,inheritAttrs: false 选项不会影响 style 和 class 的绑定。

几个小例子

计数器

<div id="components-demo">
    <button-counter></button-counter>
    <button-counter></button-counter>
    <button-counter></button-counter>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    Vue.component('button-counter',{
        data:function () {
            return{
                count:0
            }
        },
        template:'<button v-on:click="count++">点击我{
  {count}}</button>'
    });
    let cpdemo = new Vue({
        el:'#components-demo'
    });

在这里插入图片描述

为了使每个计数器,不会影响到其他的计数器。一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝。

博文小组件

<div id="app3">
    <blog-all
            v-for="post in posts"
            v-bind:key="post.id"
            v-bind:title="post.title"
            v-bind:author="post.author"
            v-bind:time="post.time"
    >
    </blog-all>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let app3 = new Vue({
        el:'#app3',
        data:{
            posts:[
                {id:1,title:"前端三剑客知识点概览",author:"杀手一只知更鸟",time:'2022-12-01'},
                {id:2,title:"Java学习路线",author:"debuger",time:'2022-12-07'},
                {id:3,title:"ssm框架整合+springBoot学习",author:"杀手一只知更鸟",time:'2022-12-21'},
                {id:4,title:"前后端分离的完整项目",author:"杀手一只知更鸟",time:'2022-12-21'}
            ]
        },
        components:{
            'blog-all':{
                props:{
                    'id':Number,
                    'author':String,
                    'title':String,
                    'time':String
                },
                template:'<div><h3>{
  {title}}</h3><p>{
  {author+time}}</p></div>'
            }
        }
    });

在组件中,可以灵活的使用v-bind属性来动态绑定数据,并且通过v-for指令来遍历渲染对象中的不同的数据。
在这里插入图片描述

未完待续!
在这里插入图片描述

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2506 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
531 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
458 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
355 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。