前端-renren-ui学习

一、index.html解析

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" href="/favicon.ico" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>人人开源 - 快速开发平台</title><script>//全局钩子/** 定义了一个全局变量 SITE_CONFIG,其中包含了应用程序中的一些配置信息。具体含义如下:apiURL: "<%=apiURL%>": 这是一个 API 的 URL 地址。
* 在代码中使用了 <%=apiURL%> 这样的语法,它可能是一个模板字符串或者模板引擎的语法,用来动态地将实际的 API 地址填充到这个位置。
* 换句话说,这个字段存储了应用程序需要与后端通信的接口地址。
通过将这些配置信息存储在 SITE_CONFIG 对象中,并将其定义为全局变量,可以在应用程序的任何地方方便地访问和使用这些配置信息,
* 而不需要重复地在各个模块中定义或引入。*** */window.SITE_CONFIG = {//apiapiURL: "<%=apiURL%>"};</script></head><body><div id="app"></div><script type="module" src="./src/main.ts"></script></body>
</html>

二、App.vue解析

<script lang="ts">
import "@/assets/css/app.less";
import "@/assets/theme/index.less";
import "@/assets/theme/mobile.less";
import FullscreenLayout from "@/layout/fullscreen-layout.vue";
import Layout from "@/layout/index.vue";
import { ElConfigProvider } from "element-plus";
import { defineComponent, onMounted, reactive, watch } from "vue";
import { useRoute } from "vue-router";
import { useAppStore } from "@/store";
import app from "./constants/app";
import { EPageLayoutEnum, EThemeColor, EThemeSetting } from "./constants/enum";
import { IObject } from "./types/interface";
import { getThemeConfigCache, setThemeColor, updateTheme } from "./utils/theme";export default defineComponent({ /*这里使用 defineComponent 函数创建了一个 Vue 组件,并通过 export default 将其导出为默认模块*/name: "App", /*组件的名称,命名为 "App"*/components: { Layout, FullscreenLayout, [ElConfigProvider.name]: ElConfigProvider }, /*这里声明了组件中引入的其他组件。Layout、FullscreenLayout 和 ElConfigProvider 是其他组件,通过这种方式在当前组件中注册,以便在模板中使用*/setup() { /*这是 Composition API 的入口函数,用于组件的逻辑设置。*/const store = useAppStore();/*使用 useAppStore() hook 获取应用程序的状态管理仓库。*/const route = useRoute();/*使用 useRoute() hook 获取当前路由信息*/const state = reactive({layout: location.href.includes("pop=true") ? EPageLayoutEnum.fullscreen : EPageLayoutEnum.page}); /*使用 reactive() 函数创建一个响应式对象 state,其中包含了组件内部的状态,包括了布局信息*/onMounted(() => {/*在组件被挂载后执行的钩子函数,用于在组件挂载后执行一些操作,如在此处进行主题色缓存的读取和主题更新*///读取主题色缓存const themeCache = getThemeConfigCache();const themeColor = themeCache[EThemeSetting.ThemeColor];setThemeColor(EThemeColor.ThemeColor, themeColor);updateTheme(themeColor);});/*用于监听某些数据的变化,并在数据变化时执行相应的操作。在此处监听了路由信息的变化,根据路由信息更新了组件的布局状态*/watch(() => [route.path, route.query, route.fullPath],([path, query, fullPath]) => {store.updateState({ activeTabName: fullPath });state.layout = app.fullscreenPages.includes(path as string) || (query as IObject)["pop"] ? EPageLayoutEnum.fullscreen : EPageLayoutEnum.page;});/*返回一个对象,其中包含了组件中需要在模板中访问的属性和方法,这些属性和方法会被绑定到组件的模板中*/return {store,state,pageTag: EPageLayoutEnum.page};}
});
</script>
<template><el-config-provider><div v-if="!store.state.appIsRender" v-loading="true" :element-loading-fullscreen="true" :element-loading-lock="true" style="width: 100vw; height: 100vh; position: absolute; top: 0; left: 0; z-index: 99999; background: #fff"></div><template v-if="store.state.appIsReady"><layout v-if="state.layout === pageTag"> </layout><fullscreen-layout v-else></fullscreen-layout> <!--自定义组件,全局布局--></template></el-config-provider>
</template>

三、main.ts解析

import "@/assets/icons/iconfont/iconfont.js";
import RenDeptTree from "@/components/ren-dept-tree";
import RenRadioGroup from "@/components/ren-radio-group";
import RenRegionTree from "@/components/ren-region-tree";
import RenSelect from "@/components/ren-select";
import ElementPlus from "element-plus";
import "element-plus/theme-chalk/display.css";
import "element-plus/theme-chalk/index.css";
import locale from "element-plus/es/locale/lang/zh-cn";
import { createApp } from "vue";
import { createPinia } from "pinia";
import App from "./App.vue";
import router from "./router";
import * as ElementPlusIcons from "@element-plus/icons-vue";import axios from "axios";
import "virtual:svg-icons-register";const app = createApp(App);  /*创建了一个 Vue 应用实例 app,并将其初始化为一个使用 App 组件的应用。*//*总之,这段代码的作用是将 Element Plus 图标组件注册到 Vue 应用实例中,以便在应用中使用这些图标。*/
Object.keys(ElementPlusIcons).forEach((iconName) => {app.component(iconName, ElementPlusIcons[iconName as keyof typeof ElementPlusIcons]); /*在 Vue 应用实例 app 中注册了 Element Plus 图标组件。iconName 是当前图标的名称,ElementPlusIcons[iconName] 获取了对应图标的组件。keyof typeof ElementPlusIcons 是 TypeScript 中的一种类型声明,它确保我们在访问 ElementPlusIcons 对象时使用的键是该对象实际上具有的键之一*/
});/*使用 Object.keys() 方法获取了 ElementPlusIcons 对象的所有键(即图标的名称),然后通过 forEach 方法遍历每个键。 *//*这段代码是在一个 Vue.js 应用中配置各种插件和组件,然后将应用挂载到 HTML 页面上*/
app.use(createPinia()) /*使用了 Vue.js 的状态管理库 Pinia,通过 createPinia() 函数创建了一个 Pinia 实例,并将其添加到 Vue 应用中*/.use(router)        /*使用了 Vue Router,将 Vue Router 实例添加到 Vue 应用中,以便进行页面路由导航。*/.use(RenRadioGroup) /*使用了自定义的 RenRadioGroup 组件,将其添加到 Vue 应用中。*/.use(RenSelect)     /**/.use(RenDeptTree).use(RenRegionTree).use(ElementPlus, { size: "default", locale: locale })   /*在 Vue 应用实例 app 中注册了 Element Plus 图标组件。iconName 是当前图标的名称,ElementPlusIcons[iconName] 获取了对应图标的组件。keyof typeof ElementPlusIcons 是 TypeScript 中的一种类型声明,它确保我们在访问 ElementPlusIcons 对象时使用的键是该对象实际上具有的键之一*/.mount("#app"); /*将 Vue 应用实例挂载到 HTML 页面上的一个具有 id 为 "app" 的 DOM 元素上,这是 Vue 应用的根元素。也就是index.html *//*将 axios 赋值给全局对象 window 的一个属性 axios。
这样做的目的是在浏览器环境中,可以通过 window.axios 来访问和使用 axios,而无需在每个模块中单独引入和使用 axios。
这种做法在某些情况下可以方便地在整个应用程序中共享和使用 axios,但也可能增加了全局变量的数量,因此需要谨慎使用*/
window.axios = axios;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820604.shtml

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

相关文章

自动化测试-如何优雅实现方法的依赖

在复杂的测试场景中&#xff0c;常常会存在用例依赖&#xff0c;以一个接口自动化平台为例&#xff0c;依赖关系&#xff1a; 创建用例 --> 创建模块 --> 创建项目 --> 登录。 用例依赖的问题 • 用例的依赖对于的执行顺序有严格的要求&#xff0c;比如让被依赖的方…

市面上加密混淆软件的比较和推荐

引言 市面上有许多加密混淆软件可供开发者使用&#xff0c;但哪些软件是最好用的&#xff1f;哪些软件受到开发者的喜爱&#xff1f;本文将根据一次在CSDN上的投票结果&#xff0c;为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果&#xff0c;希望能对大家的选择…

JSON数据格式讲解与cJSON库的使用

文章目录 写在前面一、安装cJSON二、使用cJSON1、使用的文件2、如何传输数据&#xff1a;**** 三、JSON语法四、cJSON函数讲解1、cJSON结构体 **2、cJSON结构体与字符串之间的转换&#xff08;重要&#xff09;2.1、标题将cJSON结构体转换为字符串(常用)2.2、将字符串转为cJSON…

vue详解(2)

1. 指令修饰符 通过 “.” 指明一些指令 后缀&#xff0c;不同 后缀 封装了不同的处理操作 → 简化代码 ① 按键修饰符 keyup.enter → 键盘回车监听 ② v-model修饰符 v-model.trim → 去除首尾空格 v-model.number → 转数字 ③ 事件修饰符 事件名.stop → 阻止冒泡&…

Java如何使用ElasticSearch

1、添加依赖&#xff1a; 首先&#xff0c;你需要在你的 Java 项目中添加 ElasticSearch 的客户端依赖。如果你使用 Maven&#xff0c;可以在 pom.xml 文件中添加如下依赖&#xff1a; <dependencies><dependency><groupId>org.elasticsearch.client</g…

看看《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制山鸢尾萼片长度和萼片宽度的小提琴图

使用MATLAB绘制鸢尾花数据集&#xff08; fisheriris&#xff09;中山鸢尾&#xff08; Iris Setosa&#xff09;的萼片长度和 萼片宽度的小提琴图。这将帮助我们更好地了解山鸢尾的这两个特征的数据分布情况&#xff0c;包括它们的 中位数、四分位范围及密度估计。这种可视化工…

华为配置路由式Proxy ARP示例

配置路由式Proxy ARP示例 组网图形 图1 配置路由式Proxy ARP组网图 路由式Proxy ARP简介配置注意事项组网需求配置思路操作步骤配置文件 路由式Proxy ARP简介 企业内部进行子网划分时&#xff0c;可能会出现两个子网网络属于同一网段&#xff0c;但是却不属于同一物理网络的情…

Jsoncpp简单使用

Jsoncpp是个跨平台的C开源库&#xff0c;提供的类为我们提供了很便捷的操作&#xff0c;而且使用的人也很多。在使用之前我们首先要从github仓库下载源码&#xff0c;地址如下&#xff1a;GitHub - open-source-parsers/jsoncpp: A C library for interacting with JSON. 文档…

C++ 类模板分文件编写

类模板分文件编写&#xff1a; 类模板成员函数 分文件编写 产生的问题以及解决方式是什么呢&#xff1f; 问题描述 类模板中**成员函数**创建时机是在**调用**阶段&#xff0c;导致分文件编写时**链接**不到 解决方案&#xff1a; 1、直接包含.cpp源文件&#xff1a; person…

【重磅更新】开源表单系统填鸭表单v5版发布!

亲爱的TDucker&#xff0c;你们好。 真诚感谢您对填鸭表单的关注与支持。今天我们将为您带来新版本的更新说明&#xff0c;以便您更好的使用我们的产品。 社区版版V5更新概览&#xff1a; ✅ 增加WebHook数据推送功能&#xff0c;集成TReport实现数据大屏展示。 ✅ 增加主题…

LeetCode-Java:303、304区域检索(前缀和)

文章目录 题目303、区域和检索&#xff08;数组不可变&#xff09;304、二维区域和检索&#xff08;矩阵不可变&#xff09; 解①303&#xff0c;一维前缀和②304&#xff0c;二维前缀和 算法前缀和一维前缀和二维前缀和 题目 303、区域和检索&#xff08;数组不可变&#xff…

DateTimeFormat 和 JsonFormat 应用场景详解

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【javaWeb 第七篇】后端-Spring

Spring SpringspringBoot请求简单参数实体参数数组集合参数日期参数JSON参数路径参数 响应数据分层解耦三层架构解耦操作Bean的声明Bean组件扫描问题DI详解 Spring 详细介绍结合官网查看&#xff1a;https://spring.io/why-spring Spring发展到今天已经形成一种开发生态圈&…

覆盖最全面的学术论文写作的70类细节150+ChatGPT提示词

点击下方▼▼▼▼链接直达AIPaperPass &#xff01; AIPaperPass - AI论文写作指导平台 这篇文章小编介绍了专门为论文写作定制的ChatGPT提示词&#xff0c;旨在激发创造力并为你的论文提供独特的想法和见解。通过简单的短语或指令&#xff0c;你可以解锁ChatGPT AI模型的潜力…

激光车型识别仪:交通管理领域的技术革新与应用探索

激光车型识别仪&#xff1a;交通管理领域的技术革新与应用探索 在交通管理领域&#xff0c;随着技术的不断进步&#xff0c;各种智能化设备逐渐崭露头角。其中&#xff0c;激光车型识别仪作为一种基于激光技术的车辆识别设备&#xff0c;正以其高精度、强抗干扰能力等特点&…

testWebserver所有类分析

EventLoop 智能指针 继承std::enable_shared_from_this 为什么要这么继承&#xff1a; 因为EventLoop在别的类中会被shared_ptr管理&#xff0c;并且在loop()函数中被作为参数参与到wpChannel_的构造函数中去 拥有的共享指针对象 SP_Channel wakeupChannel_ SP_Epoll pol…

用代码模拟抓包手动生成一个pcap文件

网上解析pcap文件的方法有人提供了一大堆,但是自己用代码生成一个pcap文件的方法,却几乎没人提过,我刚好要用到这块,就自己研究了一下。 首先关于pcap文件的简单介绍,请参考我另一篇文章, pcap文件的结构和格式说明以及内容解析 了解了结构,下来看代码,看怎么可以写一个…

JIT在汽车行业中的革命性应用:颠覆传统制造模式,引领智能制造新时代

随着科技的飞速发展和市场竞争的日益激烈&#xff0c;汽车行业正面临着前所未有的变革。其中&#xff0c;准时制生产&#xff08;Just-In-Time&#xff0c;简称JIT&#xff09;作为一种先进的生产管理方式&#xff0c;已经在汽车行业中得到了广泛应用&#xff0c;成为推动汽车产…

Springboot整合nacos实现配置中心及服务发现

一、概述 首先&#xff0c;nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。而springboot能够创建一个独立运行spring应用框架&#xff0c;因此&#xff0c;springboot整合nacos&#xff0c;可以更方便实现服务的发现、配置管理等相关功能。 二、spr…

word文件的创建时间和修改时间可以更改吗?答案是肯定的 文件属性修改的方法

一&#xff0c;引言 在日常生活和工作中&#xff0c;我们经常需要处理各种Word文件。有时&#xff0c;由于某些原因&#xff0c;我们可能需要更改Word文件的创建时间和修改时间。虽然这听起来可能有些复杂&#xff0c;但实际上&#xff0c;通过一些简单的方法和工具&#xff0…