当前位置: 首页 > ai >正文

Vue2+Vue3前端开发_Day5

参考课程:

黑马程序员 Vue2+Vue3基础入门到实战项目】

[https://www.bilibili.com/video/BV1HV4y1a7n4]

@ZZHow(ZZHow1024)

自定义指令

  • 基本语法(全局 & 局部注册)

    • 介绍:自己定义的指令,可以封装一些 DOM 操作,扩展额外功能。
    • 全局注册 - 语法
    Vue.directive('指令名', {"inserted" (el) {// 可以对 el 标签,扩展额外功能el.focus();}
    });
    
    • 局部注册 - 语法
    directives: {"指令名": {inserted() {// 可以对 el 标签,扩展额外功能el.focus();}}
    }
    
  • 指令的值

    • 语法:在绑定指令时,可以通过**“等号”**的形式为指令绑定具体的参数值。
    <div v-color="color">我是内容</div>
    
    • 通过 binding.value 可以拿到指令值,指令值修改会触发 update 函数。
    directives: {color: {inserted (el, binding) {el.style.color = binding.value;},update(el, binding) {el.style.color = binding.value;}}
    }
    
  • v-loading 指令封装

    • 场景:实际开发过程中,发送请求需要时间,在请求的数据未回来时,页面会处于空白状态,用户体验不好。
    • 需求:封装一个 v-loading 指令,实现加载中的效果。
    • 思路:
      1. 本质 loading 效果就是一个蒙层,盖在了盒子上。
      2. 数据请求中,开启 loading 状态,添加蒙层。
      3. 数据请求完毕,关闭 loading 状态,移除蒙层。
    • 实现:
      1. 准备一个 loading 类,通过伪元素定位,设置宽高,实现蒙层。
      2. 开启关闭 loading 状态(添加移除蒙层),本质只需要添加移除类即可。
      3. 结合自定义指令的语法进行封装复用。
    • inserted 钩子中,binding.value 判断指令的值,设置默认状态。
    • update 钩子中,binding.value 判断指令的值,更新类名状态。

插槽

  • 默认插槽

    • 作用:让组件内部的一些结构支持自定义

    • 需求:要在页面中显示一个对话框,封装成一个组件。

    • 问题:组件的内容部分,不希望写死,希望能使用的时候自定义。

    • 基本语法:

      • 组件内需要定制的结构部分,改用 <slot>…</slot> 占位。
      <div class="dialog-content"><slot></slot>
      </div>
      
      • 使用组件时,<MyDialog>…</MyDialog> 标签内部,传入结构替换 slot
      <MyDialog>你确认要退出本系统么?
      </MyDialog>
      
  • 后备内容(默认值)

    • 介绍:封装组件时,可以为预留的 <slot>…</slot> 插槽提供后备内容(默认内容)。
    • 语法:在 <slot>…</slot> 标签内,放置内容,作为默认显示内容。
    • 效果:
      • 外部使用组件时,不传东西,则 <slot>…</slot> 会显示后备内容。
      • 外部使用组件时,传东西了,则 <slot>…</slot> 整体会被换掉。
  • 具名插槽

    • 定义:一个组件内有多处结构,需要外部传入标签,进行定制。
    • 语法:
      • 多个 <slot>…</slot> 使用 name 属性区分名字。
      • template 配合 v-slot:名字 来分发对应标签。
      • v-slot:插槽名 可以简化成 #插槽名
  • 插槽分类:

    • 默认插槽:组件内定制一处结构。
    • 具名插槽:组件内定制多处结构。
  • 作用域插槽

    • 区分:是插槽的一个传参语法,不属于插槽的一类。
    • 介绍:定义 <slot>…</slot> 插槽的同时,是可以传值的。给插槽上可以 绑定数据,将来 使用组件时可以用。
    • 步骤:
      1. <slot>…</slot> 标签,以 添加属性的方式传值。
      2. 所有添加的属性,都会被收集到一个对象中。
      3. 在 template 中,通过 #插槽名="obj",默认插槽名为 default。

综合案例:商品列表

  • 需求:
    • my-tag 标签组件封装
      1. 双击显示输入框,输入框获取焦点。
      2. 失去焦点,隐藏输入框。
      3. 回显标签信息。
      4. 内容修改,回车-修改标签信息。
    • my-table 表格组件封装
      1. 动态传递表格数据渲染。
      2. 表头支持用户自定义。
      3. 主体支持用户自定义。
  • 技术点:
    1. props 父传子、$emit 子传父 和 v-model
    2. $nextTick 自定义指令。
    3. 插槽:具名插槽、作用域插槽。
  • 案例演示:product-list

路由入门

  • 单页应用程序

    • SPA - Single Page Application

    • 单页面应用(SPA):所有功能在一个 HTML 页面上实现。

    • 典型案例:网易云音乐

    • 单页应用程序对比多页应用程序

      开发分类实现方式页面性能开发效率用户体验学习成本首屏加载速度SEO
      单页一个 HTML 页面按需更新
      性能非常好
      多页多个 HTML 页面整页更新
      性能中等一般中等
      • 单页应用程序常用类型:系统类、内部网站、文档类网站 和 移动端站点
      • 多页应用程序常用类型:公司官网 和 电商类网站
  • 路由概念

    • 网络中的路由器:设备和 IP 的映射关系。
    • Vue 中的路由:路径组件映射关系。
  • VueRouter 的基本使用

    • 目标:认识插件 VueRouter,掌握 VueRouter 的基本使用步骤。

    • 作用:修改地址栏路径时,切换显示匹配的组件。

    • 说明:Vue 官方的一个路由插件,是一个第三方包。

    • 官网:

      Vue Router

    • 版本对应(233,344):

      • Vue2 → VueRouter3.x - Vuex3.x
      • Vue3 → VueRouter4.x - Vuex4.x
    • 使用步骤:

      • 5 个基础步骤(固定)

        1. 下载:下载 VueRouter 模块到当前工程,版本3.x。
        npm install vue-router@3
        
        1. 引入。
        import VueRouter from'vue-pouter';
        
        1. 安装注册。
        Vue.use(VueRouter);
        
        1. 创建路由对象。
        const router = new VueRouter();
        
        1. 注入,将路由对象注入到 new Vue 实例中,建立关联。
        new Vue({render: h => h(App),router
        }).$mount('#app')
        
      • 2 个核心步骤(根据项目需要配置)

        1. 创建需要的组件(views 目录),配置路由规则。

          如:Find.vue、My.vue 和 Friend.vue。

        import Find from './views/Find.vue'
        import My from './views/My.vue'
        import Friend from './views/Friend.vue'const router = new VueRouter({routes: [{ path: '/find', component: Find },{ path: '/my', component: My },{ path: '/friend', component: Friend },]
        })
        
        1. 配置导航,配置路由出口(路径匹配的组件显示的位置)。
        <div class="footer_wrap"><a href="#/find">发现音乐</a><a href="#/my">我的音乐</a><a href="#/friend">朋友</a>
        </div>
        <div class="top"><router-view></router-view>
        </div>
        
  • 组件目录存放问题

    • 注意:.vue 文件放在哪里,文件本身并没有区别。
    • 分类的目的:便于维护。
    • 组件分类:
      • 页面组件
        • 使用场景:页面展示 - 配合路由使用。
        • 路径:src/views
      • 复用组件
        • 使用场景:展示数据 - 常用于复用。
        • 路径:src/components
http://www.xdnf.cn/news/18337.html

相关文章:

  • 【neo4j】安装使用教程
  • lesson44:Redis 数据库全解析:从数据类型到高级应用
  • 计算机网络:网络基础、TCP编程
  • 如何自定义一个SpringBoot Starter
  • 密码管理中明文密码与空密码的危害与预防
  • 继承(Inheritance)
  • 机器学习集成算法与K-means聚类
  • Pytest 插件怎么写:从0开发一个你自己的插件
  • 14. 多线程(进阶1) --- 常见的锁策略和锁的特性
  • 【Protues仿真】基于AT89C52单片机的数码管驱动事例
  • Windows下,将本地视频转化成rtsp推流的方法
  • strcasecmp函数详解
  • AI模型部署 - 大语言模型(LLM)部署技术与框架
  • js来比较两个对象内容有误差异
  • mysql数据库学习
  • 想在手机上操作服务器?cpolar让WaveTerminal终端随身携带,效率倍增
  • 【Springboot进阶】Java切面编程对性能的影响深度分析
  • 【Ruoyi解密-02.登录流程:】登录-找密码不抓瞎
  • selenium3.141.0执行JS无法传递element解决方法
  • Linux的奇妙冒险——进程间通信(管道、SystemV IPC)
  • 完全背包(模板)
  • webrtc中win端音频---windows Core Audio
  • 2025图表制作完全指南:设计规范、工具选型与行业案例
  • Chrome/360 浏览器扩展深度解析:内置扩展与普通扩展的实现机制对比
  • (栈)Leetcode155最小栈+739每日温度
  • 力扣 30 天 JavaScript 挑战 第37天 第九题笔记 知识点: 剩余参数,拓展运算符
  • Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
  • 【C++去除整数某一位数字求新数和倍数保留2位小数控制】2022-10-22
  • 人工智能 -- 循环神经网络day1 -- 自然语言基础、NLP基础概率、NLP基本流程、NLP特征工程、NLP特征输入
  • 打造医疗新质生产力