2023最新版老杜Vue2+3实战教程(三)Vue组件化

本文是动力节点老杜的Vue2到Vue3实战教程,详细讲解了Vue组件化的概念、创建、注册和使用,包括组件嵌套、VueComponent与Vue的关系、单文件组件、Vue CLI的安装与使用。通过实例探讨了组件的props配置、事件处理、混入、插件、局部样式与数据持久化,并提供了BugList案例的组件化改造过程,深入理解Vue的组件通信和项目构建流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动力节点老杜全新版Vue教程笔记分享给大家

学习の地止:https://www.bilibili.com/video/BV17h41137i4

  • 视频教程从Vue2开始讲解,一步一个案例,知识点由浅入深,然后很自然的过度到Vue3版本。Vue3是目前企业中使用最多的一个版本。
  • 视频中会把每一个Vue的知识点讲解的非常通透,不但举例告诉你怎么用,还会告诉你底层实现原理。
  • 例如:Vue的数据代理机制底层实现原理是什么?本套视频中会从零手写一个Vue的数据代理机制,都是源码级的讲解。

3 Vue组件化

3.1 什么是组件

  1. 传统方式开发的应用

一个网页通常包括三部分:结构(HTML)、样式(CSS)、交互(JavaScript)

传统应用存在的问题:

  1. 关系纵横交织,复杂,牵一发动全身,不利于维护。
  2. 代码虽然复用,但复用率不高。
  3. 组件化方式开发的应用


使用组件化方式开发解决了以上的两个问题:

  1. 每一个组件都有独立的js,独立的css,这些独立的js和css只供当前组件使用,不存在纵横交错。更加便于维护。
  2. 代码复用性增强。组件不仅让js css复用了,HTML代码片段也复用了(因为要使用组件直接引入组件即可)。
  3. 什么是组件?
    1. 组件:实现应用中局部功能的代码和资源的集合。凡是采用组件方式开发的应用都可以称为组件化应用。
    2. 模块:一个大的js文件按照模块化拆分规则进行拆分,生成多个js文件,每一个js文件叫做模块。凡是采用模块方式开发的应用都可以称为模块化应用。
    3. 任何一个组件中都可以包含这些资源:HTML CSS JS 图片 声音 视频等。从这个角度也可以说明组件是可以包括模块的。
  4. 组件的划分粒度很重要,粒度太粗会影响复用性。为了让复用性更强,Vue的组件也支持父子组件嵌套使用。


子组件由父组件来管理,父组件由父组件的父组件管理。在Vue中根组件就是vm。因此每一个组件也是一个Vue实例。

3.2 组件的创建、注册和使用

  1. **
  2. <html lang=“en”>

  3. **<meta** charset="UTF-8"**>**  
    
  4. **<title>**组件的创建注册和使用**</title>**  
    
  5. **<script** src="../js/vue.js"**></script>**  
    
  6. **<div** id="app"**>**  
    
  7.     **<h1>**{
        
        {msg}}**</h1>**  
    
  8.     <!-- 3.使用组件 -->  
    
  9.     **<userlist></userlist>**  
    
  10.     **<userlist></userlist>**  
    
  11.     **<userlogin></userlogin>**  
    
  12.     **<userlogin></userlogin>**  
    
  13. **</div>**  
    
  14. **<script>**  
    
  15.     // 1.创建组件  
    
  16.     const userListComponent = Vue.extend({  
    
  17.         template : `  
    
  18.             **<ul>**  
    
  19.                 **<li** v-for="(user,index) of users" :key="user.id"**>**  
    
  20.                     {
        
        {index}},{
        
        {user.name}}  
    
  21.                 **</li>**  
    
  22.             **</ul>**      
    
  23.         `,  
    
  24.         data(){  
    
  25.             return {  
    
  26.                 users : [  
    
  27.                     {id:'001', name:'jack'},  
    
  28.                     {id:'002', name:'lucy'},  
    
  29.                     {id:'003', name:'james'}  
    
  30.                 ]  
    
  31.             }  
    
  32.         }  
    
  33.     })  
    
  34.     // 1.创建组件  
    
  35.     const userLoginComponent = Vue.extend({  
    
  36.         template : `  
    
  37.         **<div>**  
    
  38.         **<h3>**用户登录**</h3>**  
    
  39.         **<form** @submit.prevent="login"**>**  
    
  40.         账号:**<input** type="text" v-model="username"**><br><br>**  
    
  41.         密码:**<input** type="password" v-model="password"**><br><br>**  
    
  42.         **<button>**登录**</button>**  
    
  43.         **</form>**  
    
  44.         **</div>**  
    
  45.         `,  
    
  46.         data(){  
    
  47.             return {  
    
  48.                 username : 'admin',  
    
  49.                 password : '123'  
    
  50.             }  
    
  51.         },  
    
  52.         methods : {  
    
  53.             login(){  
    
  54.                 alert(this.username + "," + this.password)  
    
  55.             }  
    
  56.         }  
    
  57.     })  
    
  58.     const vm = new Vue({  
    
  59.         el : '#app',  
    
  60.         data : {  
    
  61.             msg : '组件的创建注册和使用'  
    
  62.         },  
    
  63.         // 2.注册组件(局部注册)  
    
  64.         components : {  
    
  65.             // userlist 就是组件的名字  
    
  66.             userlist : userListComponent,  
    
  67.             userlogin : userLoginComponent  
    
  68.         }  
    
  69.     })  
    
  70. **</script>**  
    
  71. 创建组件

    1. const userComponent = Vue.extend({这个配置项和创建Vue实例的配置项几乎是一样的,只是略有差异})
    2. 需要注意的是:
      1. el不能用。组件具有通用性,不特定为某个容器服务,它为所有容器服务。
      2. data必须使用函数形式:return {}
      3. 使用template配置项配置页面结构:HTML。
  72. 注册组件

    1. 局部注册
      1. 使用components配置项:components : {user : userComponent},user就是组件名。
    2. 全局注册
      1. Vue.component(‘user’, userComponent)
  73. 使用组件

    1. 直接在页面需要使用组件的位置:
    2. 也可以这样使用: (不在脚手架环境中使用这种方式会出现后续元素不渲染的问题。)
  74. 创建组件对象也有简写形式:Vue.extend() 可以省略。直接写:{}

  75. 组件的命名细节:

    1. 全部小写
    2. 首字母大写,后面全部小写
    3. kebab-case串式命名法
    4. CamelCase驼峰式命名法(这种方式需要在脚手架环境中使用)
    5. 不要使用HTML内置的标签作为组件名称。
    6. 可以使用name配置项来指定Vue开发者工具中显示的组件名。

3.3 组件嵌套

  1. **
  2. <html lang=“en”>
  3. **<meta** charset="UTF-8"**>**  
    
  4. **<title>**组件嵌套**</title>**  
    
  5. **<script** src="../js/vue.js"**></script>**  
    
  6. **<div** id="root"**></div>**  
    
  7. **<script>**  
    
  8.     // 创建Y1组件  
    
  9.     const y1 = {  
    
  10.         template : `  
    
  11.             **<div>**  
    
  12.                 **<h3>**Y1组件**</h3>**  
    
  13.             **</div>**  
    
  14.         `  
    
  15.     }  
    
  16.     // 创建X1组件  
    
  17.     const x1 = {  
    
  18.         template : `  
    
  19.             **<div>**  
    
  20.                 **<h3>**X1组件**</h3>**  
    
  21.             **</div>**  
    
  22.         `  
    
  23.     }  
    
  24.     // 创建Y组件  
    
  25.     const y = {  
    
  26.         template : `  
    
  27.             **<div>**  
    
  28.                 **<h2>**Y组件**</h2>**  
    
  29.                 **<y1></y1>**  
    
  30.             **</div>**  
    
  31.         `,  
    
  32.         components : {y1}  
    
  33.     }  
    
  34.     // 创建X组件  
    
  35.     const x = {  
    
  36.         template : `  
    
  37.             **<div>**  
    
  38.                 **<h2>**X组件**</h2>**  
    
  39.                 **<x1></x1>**  
    
  40.             **</div>**  
    
  41.         `,  
    
  42.         components : {x1}  
    
  43.     }  
    
  44.     // 创建app组件  
    
  45.     const app = {  
    
  46.         template : `  
    
  47.             **<div>**  
    
  48.                 **<h1>**App组件**</h1>**  
    
  49.                 **<x></x>**  
    
  50.                 **<y></y>**  
    
  51.             **</div>**  
    
  52.         `,  
    
  53.         // 注册X组件  
    
  54.         components : {x,y}  
    
  55.     }  
    
  56.     // vm  
    
  57.     const vm = new Vue({  
    
  58.         el : '#root',  
    
  59.         template : `  
    
  60.             **<app></app>**  
    
  61.         `,  
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值