参考课程:

黑马程序员 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.pswp.cn/news/919663.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919663.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919663.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习--决策树2

目录 第一代裁判&#xff1a;ID3 与信息增益的 “偏爱” 第二代裁判&#xff1a;C4.5 用 “增益率” 找平衡 第三代裁判&#xff1a;CART 的 “基尼指数” 新思路 遇到连续值&#xff1f;先 “砍几刀” 再说 给决策树 “减肥”&#xff1a;剪枝的学问 动手试试&#xff1…

yggjs_react使用教程 v0.1.1

yggjs_react是一个用于快速创建React项目的工具&#xff0c;它集成了Vite、TypeScript、Zustand和React Router等现代前端技术栈&#xff0c;帮助开发者快速搭建高质量的React应用。 快速入门 快速入门部分将指导您如何安装yggjs_react工具、创建新项目并启动开发服务器。 安…

vulhub可用的docker源

这一块不太容易找&#xff0c;我试了好几个源&#xff0c;下面是20250820测试可用源 编辑方法sudo mkdir -p /etc/docker sudo vim /etc/docker/daemon.json 配置内容 [1] {"registry-mirrors" : ["https://docker.registry.cyou", "https://docker-…

基于YOLOv8-SEAttention与LLMs融合的农作物害虫智能诊断与防控决策系统

1. 引言 1.1 研究背景与意义 农作物虫害是制约农业产量与质量的重要因素。据FAO报告&#xff0c;全球每年因病虫害造成的粮食损失高达 20%–40%。传统人工巡查与经验诊断具有时效性差、成本高与专业人才不足等缺陷。近年来&#xff0c;计算机视觉特别是目标检测技术在农业检测…

从零开始构建GraphRAG红楼梦知识图谱问答项目(三)

文章结尾有CSDN官方提供的学长的联系方式&#xff01;&#xff01; 欢迎关注B站从零开始构建一个基于GraphRAG的红楼梦项目 第三集01 搭建后端服务 创建一个python文件server.py 完整源码放到文章最后了。 1.1 graphrag 相关导入 # GraphRAG 相关导入 from graphrag.query.cont…

S32K328(Arm Cortex-M7)适配CmBacktrace错误追踪

CmBacktrace 相当于重写了hard_fault函数&#xff0c;在hard_fault函数里面去分析SCB寄存器的信息和堆栈信息&#xff0c;然后把这些信息打印出来(或者写到flash)&#xff1b;通过使用串口输出产生hard_fault的堆栈信息&#xff0c;然后利用addr2line工具反推出具体的代码执行函…

AI研究引擎的简单技术实现步骤

产品愿景与核心功能 1.1 产品使命 “洞见 Weaver”是一个全栈AI Web应用,旨在将用户的复杂研究问题,通过AI驱动的动态思维导图和结构化报告,转化为一次沉浸式的、可追溯的视觉探索之旅。我们的使命是,将AI复杂的推理过程透明化,将人类的探索直觉与AI的分析能力无缝结合,…

open webui源码分析5-Tools

本文从最简单的时间工具入手&#xff0c;分析Tools相关的代码。一、安装工具git clone https://github.com/open-webui/openapi-servers cd openapi-servers# 进入时间工具目录 cd servers/timepip install -r requirements.txt# 启动服务 uvicorn main:app --host 0.0.0.0 --r…

windows下通过vscode远程调试linux c/cpp程序配置

windows下通过vscode远程调试linux c/cpp程序配置vscode插件配置linux依赖工具安装launch.json配置vscode插件配置 CodeLLDB插件需要提前下载&#xff1a; linux依赖工具安装 sudo apt update sudo apt install cmake clangdlaunch.json配置 {"version": "0…

IDEA报JDK版本问题

解决思路&#xff1a;1.找到配置jdk的IDEA配置位置settings和project structure2.先配置setting3.再修改项目结构

VirtualBox 安装 Ubuntu Server 系统及 Ubuntu 初始配置

文章目录简介VirtualBoxUbuntu Server 简介Ubuntu Server 下载安装 Ubuntu Server首选项配置导入系统镜像配置系统用户配置内存 CPU 虚拟硬盘开始安装 Ubuntu安装完成登录系统配置网络Ubuntu 系统配置安装常用工具安装 SSH设置 root 密码配置 IP 地址&#xff08;推荐自动分配I…

Milvus 可观测性最佳实践

Milvus 介绍 Milvus 是一个开源的向量数据库&#xff0c;专为处理大规模、高维度向量数据而设计&#xff0c;广泛应用于人工智能、推荐系统、图像检索、自然语言处理等场景。它支持亿级向量的高效存储与快速检索&#xff0c;内置多种相似度搜索算法&#xff08;如 HNSW、IVF、…

arcgis-空间矫正工具(将下发数据A的信息放置原始数据B的原始信息并放置到成果数据C中,主要按下发数据A的范围)

正常来说&#xff0c;可以直接相交获取&#xff0c;但是会存在原始数据B将下发数据A进行分割&#xff0c;所以相交功能会导致最终成果会产生稀碎图斑及图斑切割&#xff0c;因此&#xff0c;经学习了解&#xff0c;学会此方法进行既保留原始数据B的信息&#xff0c;又按下发数据…

MySQL深分页慢问题及性能优化

在数据驱动的应用中&#xff0c;分页是不可或缺的功能。然而&#xff0c;当数据量达到百万甚至千万级别时&#xff0c;传统基于 LIMIT OFFSET 的分页方式会遭遇严重的性能瓶颈&#xff0c;即“深分页”问题。本文将剖析其根源并提供主流的优化策略。问题根源&#xff1a;LIMIT …

漫谈《数字图像处理》之平滑

在数字图像处理中&#xff0c;平滑&#xff08;Smoothing&#xff09; 的核心目标是降低图像噪声、模糊细节或简化纹理&#xff0c;本质是通过 “局部邻域运算” 对像素值进行 “平均化” 或 “规整化”&#xff0c;让图像整体更 “平缓”。形态学平滑与高斯平滑、均值平滑等其…

机器学习之数据预处理学习总结

在机器学习中&#xff0c;数据预处理是模型训练前至关重要的环节&#xff0c;直接影响模型的性能和准确性。通过本次学习&#xff0c;我系统掌握了数据预处理的核心方法与工具&#xff0c;现将主要内容总结如下&#xff1a;一、缺失值处理缺失值是实际数据中常见的问题&#xf…

在完全没有无线网络(Wi-Fi)和移动网络(蜂窝数据)的环境下,使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本2)

在完全没有无线网络&#xff08;Wi-Fi&#xff09;和移动网络&#xff08;蜂窝数据&#xff09;的环境下&#xff0c;要实现用安卓手机通过USB数据线控制电脑&#xff0c;核心思路是&#xff1a;利用USB数据线创建一個纯粹的、本地的有线网络连接。 这不仅是可行的&#xff0c;…

Ubuntu22.04配置网络上网

前言 安装Ubuntu系统后&#xff0c;有时会遇到无法联网、无法使用浏览器的问题。然而当宿主机已连接网络时&#xff0c;虚拟机通常也能联网&#xff0c;需要进行一些配置&#xff0c;现在就以Ubuntu22.04为例。 VMware配置打开虚拟网络编辑器 启动VMWare点击编辑&#xff0c;并…

网络协议之TCP和UDP

写在前面 本文来看下TCP和UDP协议。 我们接触这两个协议最多的应该就是在面试中了&#xff0c;经典题目就是“TCP和UDP有什么区别&#xff1f;”&#xff0c;而最常得到的答案就是TCP是面向连接的&#xff0c;而UDP是面向无连接的。 那么这里的连接到底是什么呢&#xff1f;难…

Qt音乐播放器项目实践:本地持久化与边角问题处理

本音乐播放器完整项目源码(包含各个按钮的图片文件): ly/Project-Code - Gitee.com 一.本地持久化 请注意&#xff0c;学习此部分之前需要读者具有一定的Mysql基础。如果读者能够接受无法本地持久化&#xff0c;那么可以跳过这部分内容&#xff0c;直接去看边角问题处理。我…