vue3(一) - 结构认识

通过之前博客应该已经完成了vue脚手架的认识和创建(地址),这节我们简单介绍一下需要使用的一些关键技术,后续在详细介绍

结构目录

创建脚手架时,我选择了TypeScript,store,route这三个选项

index.html入口

node_modules存放npm下载的资源依赖 在package.json中定义的依赖使用npm i都会下载到这里

src中

assets 存放的是一些静态资源,例如一些静态图片等,也可以放公共的css和js文件;

components 存放的是一些全局组件或多个页面公用的子组件,比如: 页头组件、页脚组件、广告轮播组件等;

router 存放的是路由配置,保存着所有路径和组件的对应关系;

views 存放所有的页面组件,有几个页面,就在views下创建几个组件文件,比如: 首页、详情页、商品列表页、登录页等;

App.vue 是整个网站所有页面公共的容器组件;

main.ts 脚手架核心js,导入整个项目中用到的js,实例化vue的对象,通过实例化的vue渲染整个程序,承担了配置Vue项目的责任。

Router

官方文档:入门 | Vue Router (vuejs.org)

router是一个路由管理,这里来配置路由信息,这里我们主要讲一些如何配置的,在main.ts中引用一些资源文件,其中就有router,其中router中配置好router之后还有一个路由守卫,可以在这里编写一些代码配合store仓库使用,比如身份信息验证等

import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router';

import defaultRoutes from './defaultRoutes';

// const routes: any = staticRoutes.concat(defaultRoutes);

const routes: any = defaultRoutes;

const router = createRouter({

  history: createWebHashHistory(),

  routes

});

// 路由守卫

router.beforeEach((to, _from, next) => {

    //...你的代码逻辑

    // 重定向到首页

    if (to.path === '/') {

      next({ path: '/home', replace: true })

      return

    }

  // 设置页面标题

  document.title = to.meta.title as string

  next()

})
 

export default router

我的defaultRoutes.ts的内容

const defaultRoutes: any = [

  {

    path: '/:catchAll(.*)',

    name: '404',

    component:() => import('@/views/errs/index.vue')

  },

  {

    path: '/login',

    name: '登录',

    component: () => import('@/views/login/index.vue')

  }

];

export default defaultRoutes;

其中如果我们需要使用布局页的功能,只需要在外层嵌套一层模板即可

在src下创建views/layout/index.vue

其中sliderbar和appmain是其他模板,按需引入即可

store

官方文档:Pinia (vuejs.org)

stroe 状态管理库,一般是存放一些关键信息,比如用户信息等,它允许你跨组件或页面共享状态,你可以使用vuex或者pinia两个其中一个,这里我们选择pinia,我们先看一下结构

import { staticRoutes } from '../router/staticRoutes';

import { defineStore } from 'pinia'

export const useStore = defineStore('storeId', {

  // 为了完整类型推理,推荐使用箭头函数

  state: () => ({

    isCollapse: false,

    staticRoutes: staticRoutes // 假设你已经有了静态路由的默认值

  }),

  getters: {

  },

  actions: {

    toggleSideBar() {

      this.isCollapse = !this.isCollapse;

    },

    setStaticRoutes(routes: any) {

      this.staticRoutes = routes;

    },

  },

})

export default useStore;

其中state相当于vue中data,getter相当于计算属性,actions相当于方法

在此之前我们需要安装npm install pinia

导入之后使用defineStore定义,定义之后可以全局调用

按需进行导入,可以调用定义的对象

在main中增加引入

import { createPinia } from 'pinia'

const store = createPinia()

app.use(store)

app.mount('#app')

i18n

国际化语言配置,你可以配置全局配置来改变你程序中所使用的语言是中文还是其他语言

安装命令npm install vue-i18n@9

你可以在src创建一个language文件夹

在language下创建index.ts

import { createI18n } from "vue-i18n";

import { getBrowserLang } from "../utils";

import zh from "./modules/zh";

import en from "./modules/en";



 

const i18n = createI18n({

  // Use Composition API, Set to false

  allowComposition: true,

  legacy: false,

  locale: getBrowserLang(),

  messages: {

    zh,

    en

  }

});

export default i18n;

在language下创建modules/zh.ts和en.ts配置中文和英文

//en.ts

export default {

  header: {

    componentSize: "Component size",

    language: "Language",

    theme: "theme",

    layoutConfig: "Layout config",

    primary: "primary",

    darkMode: "Dark Mode",

    greyMode: "Grey Mode",

    weakMode: "Weak Mode",

    fullScreen: "Full Screen",

    exitFullScreen: "Exit Full Screen",

    personalData: "Personal Data",

    changePassword: "Change Password",

    logout: "Logout"

  }

};

//zh.ts

export default {

 header: {

    componentSize: "组件大小",

    language: "国际化",

    theme: "全局主题",

    layoutConfig: "布局设置",

    primary: "primary",

    darkMode: "暗黑模式",

    greyMode: "灰色模式",

    weakMode: "色弱模式",

    fullScreen: "全屏",

    exitFullScreen: "退出全屏",

    personalData: "个人信息",

    changePassword: "修改密码",

    logout: "退出登录"

  }

};

在main.ts中引入

// 引入I18n语言配置

import I18n from "./languages/index";

const app = createApp(App)

// 注册I18n

app.use(I18n);

app.mount('#app')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

期中考复现

1.php渗透 用dirsearch 来扫描一下,发现了index.phps,访问一下 下载得到一个文件,打开看看,发现是一段php代码 分析得到, GET传参idadmin,主当$ GET[id] urldecode($ GET[id])时返回flag。即条件为 idadmin(urldecode…

数据可视化第十天(爬虫爬取某瓣星际穿越电影评论,并且用词云图找出关键词)

开头提醒 本次爬取的是用户评论,只供学习使用,不会进行数据的传播。希望大家合法利用爬虫。 获得数据 #总程序 import requests from fake_useragent import UserAgent import timefuUserAgent()headers{User-Agent:fu.random }page_listrange(0,10) …

《QT实用小工具·六十五》基于QPropertyAnimation实现的移动动画和控件覆盖

1、概述 源码放在文章末尾 该项目基于QPropertyAnimation实现了控件平移动画和控件之间的相互覆盖效果,项目demo演示如下所示: 项目解析: new QPropertyAnimation(ui.SingleOcclusion, “pos”); //创建动画对象,第一个参数传…

二.常见算法--贪心算法

&#xff08;1&#xff09;单源点最短路径问题 问题描述&#xff1a; 给定一个图&#xff0c;任取其中一个节点为固定的起点&#xff0c;求从起点到任意节点的最短路径距离。 例如&#xff1a; 思路与关键点&#xff1a; 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…

Vue从入门到实战 Day08~Day10

智慧商城项目 1. 项目演示 目标&#xff1a;查看项目效果&#xff0c;明确功能模块 -> 完整的电商购物流程 2. 项目收获 目标&#xff1a;明确做完本项目&#xff0c;能够收获哪些内容 3. 创建项目 目标&#xff1a;基于VueCli自定义创建项目架子 4. 调整初始化目录 目…

基于springboot实现的校园博客系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

工地升降机AI人数识别系统

工地升降机人数识别系统采用了AI神经网络和深度学习算法&#xff0c;工地升降机AI人数识别系统通过升降机内置的摄像头实时监测轿厢内的人员数量。通过图像处理和人脸识别算法&#xff0c;系统能够精确地识别升降机内的人数。一旦系统识别到人数达到或者超过设定的阈值&#xf…

QT--TCP网络通讯工具编写记录

QT–TCP网络通讯工具编写记录 文章目录 QT--TCP网络通讯工具编写记录前言演示如下&#xff1a;一、服务端项目文件&#xff1a;【1.1】server_tcp.h 服务端声明文件【1.2】thread_1.h 线程处理声明文件【1.3】main.cpp 执行源文件【1.4】server_tcp.cpp 服务端逻辑实现源文件【…

【MySQL进阶之路 | 基础篇】MySQL新特性 : 窗口函数

1. 前言 (1). MySQL8开始支持窗口函数. 其作用类似于在查询中对数据进行分组(GROUP BY)&#xff0c;不同的是&#xff0c;分组操作会把分组的结果聚合成一条记录. 而窗口函数是将结果置于每一条数据记录中. (2). 窗口函数还可以分为静态窗口函数和动态窗口函数. 静态窗口函数…

秋招突击——算法——模板题——区间DP(1)——加分二叉树

文章目录 题目描述思路分析实现代码分析总结 题目描述 思路分析 实现代码 不过我的代码写的真的不够简洁&#xff0c;逻辑不够清晰&#xff0c;后续多练练吧。 // 组合数问题 #include <iostream> #include <algorithm>using namespace std;const int N 35; int…

聚星宇学电商:现在开一家抖音网店真的好做吗

在数字经济的浪潮中&#xff0c;抖音以其强大的流量优势成为众多创业者眼中的“香饽饽”。然而&#xff0c;开一家抖音网店是否真的好做?这个问题值得我们深入探讨。 不可否认的是&#xff0c;抖音平台汇聚了海量的用户基础和丰富的社交属性&#xff0c;为商家提供了一个广阔的…

【Linux】Centos7安装RabbitMQ

【Linux】Centos7安装RabbitMQ 下载 从 rabbitmq 的 GitHub 仓库下载 https://github.com/rabbitmq/rabbitmq-server/releases rabbitmq 是 erlang 语言编写的&#xff0c;需要先安装 erlang https://github.com/rabbitmq/erlang-rpm/releases 安装 使用rz命令上传 erlang 和 …

【linux】yumvim工具理解使用

目录 Linux 软件包管理器 yum 关于 rzsz 注意事项 查看软件包 Linux开发工具 Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 简单vim配置 配置文件的位置 sudo提权 Linux 软件包管理器 yum 1.yum是什么&#xff1…

Jenkins动态slave

目录 所需环境 安装nfs 部署Jenkins 安装插件 ​编辑添加凭据 配置动态slave 连接kubernetes集群 ​编辑配置Jenkins地址 ​编辑配置Pod模板 ​编辑确认代理端口 创建任务测试 在当今软件开发生命周期中&#xff0c;持续集成/持续部署&#xff08;CI/CD&#xff09;已…

软件测试面试会问哪些问题?(二)

三、测试理论论 3.1 你们原来项目的测试流程是怎么样的 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c;我们会…

es数据备份和迁移Elasticsearch

Elasticsearch数据备份与恢复 前提 # 注意&#xff1a; 1.在进行本地备份时使用--type需要备份索引和数据&#xff08;mapping,data&#xff09; 2.在将数据备份到另外一台ES节点时需要比本地备份多备份一种数据类型&#xff08;analyzer,mapping,data,template&#xff09; …

计算机缺失ffmpeg.dll如何修复,五种详细的修复教程分享

当你在使用电脑过程中&#xff0c;突然遇到系统或软件弹出提示信息&#xff0c;告知“ffmpeg.dll文件丢失”怎么办&#xff1f;当电脑提示ffmpeg.dll丢失时&#xff0c;可能会导致一些应用程序无法正常运行或出现错误提示。下面我将介绍5种解决电脑提示ffmpeg.dll丢失的方法。 …

142.栈和队列:用栈实现队列(力扣)

题目描述 代码解决 class MyQueue { public:stack<int> stIn; // 输入栈&#xff0c;用于push操作stack<int> stOut; // 输出栈&#xff0c;用于pop和peek操作MyQueue() {}void push(int x) {stIn.push(x); // 将元素压入输入栈}int pop() {// 如果输出栈为空&…

16. Elasticsearch面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 什么是Elasticsearch? Elasticsearch是一个基于Lucene的搜索引擎。它提供了具有HTTP Web界面和无架构JSON文档的分布式&#xff0c;多租户能力的全文搜索引擎。 Elasticsearch是用Java开发的&#xff0c;根据Apache许可条款作为开源发布…

Docker镜像源自动测试镜像速度,并选择速度最快的镜像

国内执行如下代码 bash <(curl -sSL https://gitee.com/xjxjin/scripts/raw/main/check_docker_registry.sh)国外执行如下代码 bash <(curl -sSL https://github.com/xjxjin/scripts/raw/main/check_docker_registry.sh)如果有老铁有比较不错的镜像源&#xff0c;可以提…