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指令来遍历渲染对象中的不同的数据。
在这里插入图片描述

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

相关文章
|
22天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
24天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
19天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
120 64
|
26天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
31 1
vue学习第一章
|
26天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
24 1
vue学习第三章
|
26天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章
|
19天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
27 8
|
19天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
22天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
21 1
|
22天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
27 1