Vue3(1),自定义View必备知识

本文详细介绍了Vue.js中的局部组件概念、如何通过components挂载在app实例中,以及组件之间的数据传递(props)和通信机制,包括父子组件间的数据流、自定义事件的使用。还讨论了组件数据的存放(data属性)和模板组织方式(script和template标签)。
摘要由CSDN通过智能技术生成

如下代码,局部组件是使用一个常量来接收,我们将此局部组件通过 components 可以将其挂载在app实例中,这样我们在 app 实例里面就可以使用了

在这里插入图片描述

当然我们可以定义多个局部组件,然后通过 components 可以将其挂载在app实例中:

在这里插入图片描述

若我们想要局部组件之间相互使用,不能像全局组件那样在注册时向模板template写入名称标签,比如在注册组件时通过components将其挂载在想使用的实例中,然后再如全局组件那样向模板template写入名称标签:

// 注册第二个局部组件

const Box = {

components: {

‘lk-count’: Counter,

},

template: `

盒子组件

`

}

在这里插入图片描述

1.4.3、总结

全局组件:在整个Vue实例中都可以被调用,若想要全局组件之间相互使用,只需将想使用全局组件的名称写入 template

局部组件:只能在当前组件中被使用,若想在其他组件中使用,必须使用 components 将其挂载在想使用的组件中,然后再如全局组件那样向模板template写入名称标签

我们之后其实对局部组件用的更多一些。

1.5、组件标签化


template 模块写法不够清晰,如果我们能将其中的HTML分离出来写,然后挂载到对应的组件上,必然结构会变得非常清晰

Vue 提供了两种方案来定义HTML模板内容

  • 使用 < script > 标签

  • 使用 < template > 标签

1.5.1、使用script标签

下面代码是我们之前注册局部组件的代码,我们可以看到 templates 里面有一个 button 按钮

我们使用 script 标签将其抽离

在这里插入图片描述

1.5.2、使用template标签🔥

我们使用 template 标签将其抽离

<button @click=“count++”>你点击了{{count}}次

在这里插入图片描述

1.6、组件数据存放


问题:组件可以访问Vue实例数据吗?

结论:组件不能直接访问Vue实例中的 data

组件是一个单独功能模块的封装:

  • 这个模块有属于自己的 HTML 模板,也应该有属于自己的数据 data

组件自己的数据存放在哪呢?

  • 组件对象也有一个 data 属性(也可以有 methods 属性)

  • 只是这个 data 属性必须是一个函数

  • 而且这个函数返回一个对象,对象内部保存着数据

// 注册一个局部组件

const Counter = {

data() {

return {

count: 0

}

},

template: `

<button @click=“count++”>你点击了{{count}}次

`,

methods: {}

}

为什么 data 在组件中必须是一个函数呢?

我这里来写一个简单介绍:我们设立两个对象,虽然都是空对象,但是两者不相等。

let obj1 = {};

let obj2 = {};

console.log(obj1 === obj2); // false

上述代码在内存中的示意图如下:

在这里插入图片描述

我们创建一个对象

let obj = {

name: ‘秦晓’

}

let p1 = obj;

let p2 = obj;

let p3 = obj;

console.log(p1,p2,p3);

console.log(p1 === p2); // true

在这里插入图片描述

let obj = {

name: ‘秦晓’

}

let p1 = obj;

let p2 = obj;

let p3 = obj;

// 我们修改p1的name

p1.name = ‘大林’;

console.log(p1,p2,p3);

console.log(p1 === p2);

在这里插入图片描述

从上述例子中就可以看出,如果我们在使用对象的时候,很容易造成值拷贝。现在我们来回答一下为什么 data 在组件中必须是一个函数呢?

  • 首先,如果不算是一个函数,Vue 直接就会报错

  • 其次,原因是在于 Vue 让每个组件对象都返回一个新的对象,因为如果是同一个对象,组件在多次使用后会相互影响

1.7、组件通信props


组件通信的常用方式有4种:

  1. props

  2. 自定义事件

  3. 消息订阅与发布

  4. vuex

在上一个小节中,我们提到了子组件是不能引用父组件或者Vue实例的数据的

但是,在开发中,往往一些数据确实需要从上层传递到下层

  • 比如在一个页面中,我们从服务器请求到了很多的数据

  • 其中的一部分数据,并非是我们整个页面的大组件来展示的,而是需要下面的子组件进行展示

  • 这个时候,并不会让子组件再次发送一个网络请求,而是直接让大组件(父组件) 将数据传递给小组件(子组件)

组件中,使用选项 props 来声明需要从父级接收到的数据(properties)

props 的值有两种方式:

  • 方式一:字符串数组,数组中的字符串就是传递时的名称

  • 方式二:对象,对象可以设置传递时的类型,也可以设置默认值等。

1.7.1、props传数组

我们先来看方式一:先看如下代码,我们使用局部组件展示数据

技能掌握

  • Web
  • Python
  • Java
  • 在这里插入图片描述

    如果我们的数据是从服务器端返回的,那么我们就需要动态绑定数据,代码如下:

    {{brand}}

    • {{item}}
    • 在这里插入图片描述

      1.7.2、props传对象

      • 在前面,我们的 props 选项是使用一个数组

      • 除了数组之外,我们也可以使用对象,当需要对props 进行类型等验证时,就需要对象写法了

      1、类型限制

      我们可以在 props 里面限制父组件给子组件传递的数据类型

      {{cmovies}}}

      {{cmessage}}

      在这里插入图片描述

      类型一般支持:String、Number、Boolean、Array、Object、Date、Function、Symbol、自定义类型

      2、默认值和必传值
      • type : 限制的类型

      • default : 如果没有传值,给一个默认值

      • 注意:类型是对象或者数组时, 默认值必须是一个函数

      • required : 必须的,即意味着这个值是必须要传递的,不传就报错

      {{cmovies}}}

      {{cmessage}}

      3、props驼峰标识

      当我们 props 里面的属性是驼峰写法的时,在传入值时需要进行 - 连接

      {{cInfo}}

      {{childMyMessage}}

      1.7.3、子级向父级传递

      props 用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件去。这个时候,我们需要使用自定义事件来完成

      自定义事件的流程:

      • 在子组件中,通过$emit() 来发射事件

      • 在父组件中,通过v-on 来监听子组件事件

      我们来看下方代码,我们在子组件中放置一个按钮,在父组件中对子组件进行注册:

      自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

      深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

      因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
      img
      img
      img
      img
      img
      img

      既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

      由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

      如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
      img

      最后

      基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

      一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
      img

      age: ‘aaaaaa’

      },

      components: {

      cpn

      }

      })

      1.7.3、子级向父级传递

      props 用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件去。这个时候,我们需要使用自定义事件来完成

      自定义事件的流程:

      • 在子组件中,通过$emit() 来发射事件

      • 在父组件中,通过v-on 来监听子组件事件

      我们来看下方代码,我们在子组件中放置一个按钮,在父组件中对子组件进行注册:

      自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

      深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

      因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
      [外链图片转存中…(img-dk5WxQX4-1712774385432)]
      [外链图片转存中…(img-5GjeWIcx-1712774385432)]
      [外链图片转存中…(img-L66qy1Ct-1712774385433)]
      [外链图片转存中…(img-ungP4OuZ-1712774385433)]
      [外链图片转存中…(img-nnG1aBpf-1712774385433)]
      [外链图片转存中…(img-ZojsVvBJ-1712774385434)]

      既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

      由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

      如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
      [外链图片转存中…(img-ve6ZCeWG-1712774385434)]

      最后

      基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

      一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
      [外链图片转存中…(img-qFKlq96E-1712774385434)]

    • 29
      点赞
    • 23
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值