前端框架搭建(六)搭建页面框架【vite】

news2024/9/23 15:26:24

1.安装所需依赖

需要安装

  • vue-router
  • naive视图框架

npm

npm install vue-router@4 

yarn

yarn add vue-router@4
npm i -D naive-ui

2.搭建naive适配框架

创建文件夹——存放通用组件

components下创建文件夹common

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3xN5RdXg-1672576235136)(assets/image-20230101195121-3tuv5qd.png)]

全局配置常用组件

在之前创建的global.d.ts中添加Windows的配置

interface Window {
  $loadingBar?: import('naive-ui').LoadingBarProviderInst;
  $dialog?: import('naive-ui').DialogProviderInst;
  $message?: import('naive-ui').MessageProviderInst;
  $notification?: import('naive-ui').NotificationProviderInst;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NKFI1VIf-1672576235137)(assets/image-20230101195305-dpk6uk4.png)]

配置全局naive框架

<template>
  <n-loading-bar-provider>
    <n-dialog-provider>
      <n-notification-provider>
        <n-message-provider>
          <slot></slot>
          <naive-provider-content />
        </n-message-provider>
      </n-notification-provider>
    </n-dialog-provider>
  </n-loading-bar-provider>
</template>

<script setup lang="ts">
import { defineComponent, h } from 'vue';
import { useDialog, useLoadingBar, useMessage, useNotification } from 'naive-ui';

// 挂载naive组件的方法至window, 以便在路由钩子函数和请求函数里面调用
function registerNaiveTools() {
  window.$loadingBar = useLoadingBar();
  window.$dialog = useDialog();
  window.$message = useMessage();
  window.$notification = useNotification();
}

const NaiveProviderContent = defineComponent({
  name: 'NaiveProviderContent',
  setup() {
    registerNaiveTools();
  },
  render() {
    return h('div');
  }
});
</script>
<style scoped></style>

3.改造App.vue

配置全局页面路由 + naive配置

<template>
  <n-config-provider
    :locale="zhCN"
    :date-locale="dateZhCN"
    class="h-full"
  >
    <naive-provider>
      <router-view />
    </naive-provider>
  </n-config-provider>
</template>

<script setup lang="ts">
import { dateZhCN, zhCN } from 'naive-ui';
</script>

4.配置vue-router

创建router文件——专门处理路由相关

  • guard——配置路由守卫
  • routes——配置常量路由
  • index.ts——配置vue-router

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BphnMwEX-1672576235137)(assets/image-20230101200817-sze8mhu.png)]

安装@vueuse依赖

npm i @vueuse/core

路由守卫index.ts

import type { Router } from 'vue-router';
import { useTitle } from '@vueuse/core';

/**
 * 路由守卫函数
 * @param router - 路由实例
 */
export function createRouterGuard(router: Router) {
  router.beforeEach(async (to, from, next) => {
    // 开始 loadingBar
    window.$loadingBar?.start();
    // 页面跳转权限处理
    next()
  });
  router.afterEach(to => {
    // 设置document title
    useTitle(to.name);
    // 结束 loadingBar
    window.$loadingBar?.finish();
  });
}

配置路由

import type {RouteRecordRaw} from 'vue-router'
export const constRouter:RouteRecordRaw[] = [
    {
        name:'首页',
        path:'/',
        component:() => import('@/components/HelloWorld.vue')
    }
]

配置vue-router(index.ts)

import type { App } from 'vue';
import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router';
import { createRouterGuard } from './guard';
import { constRouter } from './routes';

const { VITE_HASH_ROUTE = 'N', VITE_BASE_URL } = import.meta.env;

export const router = createRouter({
  history: VITE_HASH_ROUTE === 'Y' ? createWebHashHistory(VITE_BASE_URL) : createWebHistory(VITE_BASE_URL),
  routes:constRouter
});

/** setup vue router. - [安装vue路由] */
export async function setupRouter(app: App) {
  app.use(router);
  createRouterGuard(router);
  await router.isReady();
}

export * from './routes';

导入main.ts

import { createApp } from 'vue'
import { setupAssets } from './plugins';
import App from './App.vue'
import { setupRouter } from './router';


async function setupApp() {
    // import assets: js、css
    setupAssets();
  
    const app = createApp(App);

    // vue router
    await setupRouter(app);
  
    // mount app
    app.mount('#app');
  }
  
  setupApp();
  

测试

现在,我们看一下我们的hello,world是否出来了

在这里插入图片描述

对应的修改标题(首页)和hello,world页面都出来了

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

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

相关文章

枚举的应用

枚举&#xff1a; 在数学和计算机科学理论中&#xff0c;一个集的枚举是列出某些有穷序列集的所有成员的程序&#xff0c;或者是一种特定类型对象的计数。这两种类型经常&#xff08;但不总是&#xff09;重叠。 [1] 是一个被命名的整型常数的集合&#xff0c;枚举在日常生活…

基于CAS操作的atomic原子类型

原子操作 C A S (compare And Swap&#xff09;也叫比较交换&#xff0c;是一种无锁原子算法&#xff0c;映射到操作系统就是一条cmpxchg硬件汇编指令&#xff08;保证原子性)&#xff0c;其作用是让CPU将内存值更新为新值&#xff0c;但是有个条件&#xff0c;内存值必须与期望…

站长权重在线查询,怎么查询网站权重是多少?

什么是网站权重 当站长们辛辛苦苦建立起来一个网站&#xff0c;怎么才能知道自己的网站在搜索引擎中的权重情况呢&#xff1f; 对于很多人而言&#xff0c;权重这个词可能听到最多的场景就是淘宝京东店铺权重。淘宝或京东会根据商家网店的浏览量、好评率、转化率、是否…

4A(统一安全管控平台)解析

4A是指帐号&#xff08;Account&#xff09;、认证&#xff08;Authentication&#xff09;、授权&#xff08;Authorization&#xff09;和审计&#xff08;Audit&#xff09;&#xff0c;4A统一安全管控平台是以身份为中心&#xff0c;实现帐号、认证、授权和审计统一管控的安…

Spark注意事项

一、Spark理解 数据的操作只有两种 大数据领域中对数据的操作只有两种:聚合 & 处理 无论是多华丽算法,最终都是这两个平平无奇的操作组合而成的 action理解 在spark中,一个action操作为一个jobId(在源码中可以看到runjob 是只有在action操作后才会调用) , 所以一个…

Mac内存空间不足导致无法安装Ventura?可用这些方法释放储存空间

安装Macos新版系统Ventura需要非常多的内存空间&#xff0c;本身我们的Mac磁盘空间就掣襟肘见&#xff0c;我们又该如何释放Mac磁盘空间来安装Ventura呢&#xff1f;今日&#xff0c;小编将分享一些能够释放大量Mac内存空间的方法&#xff0c;以便大家能够优化Mac的运行速度外还…

摄影基础笔记

https://www.icourse163.org/learn/UESTC-1001958013?tid1450439527#/learn/content 这里写目录标题景深 焦距 光圈视角快门测光 感光度构图井字曝光色温白平衡光光的强度光的方向色彩色相明度饱和度色相环反差影调手机瞬间后期处理景深 焦距 光圈 当我们把镜头对着一个景物聚…

Annoconda常见用法

打开conda命令行窗口 点击开始&#xff0c;选择A-选择Anaconda里面的prompt 查看环境 conda env list #查看虚拟环境 创建环境 conda create -n 虚拟环境名字 python3.8 #创建虚拟环境 python3.8 指定python版本 激活环境 conda activate 虚拟环境名字 #进入虚拟环境 …

Linux磁盘情况常用查看指令

Linux磁盘情况 磁盘查询 df -h&#xff1a;(disk free)查询磁盘的整体情况。 du -h&#xff1a;(disk usage)查询指定目录的磁盘占用情况&#xff0c;默认为当前目录 -s 指定目录占用大小汇总-h 带计量单位-a 含文件–max-depth1 子目录深度-c 列出明细的同时&#xff0c;增…

【LDF】线性判别函数(二)

感知准则函数 线性可分性 现有 nnn 个 样本: y1,y2,…,yn\mathbf{y}_1, \mathbf{y}_2, \ldots, \mathbf{y}_ny1​,y2​,…,yn​, 这些样本来自于两个类别 ω1\omega_1ω1​ 或 ω2\omega_2ω2​ 。任务: 寻找一个线性判别函数 g(x)aTyg(\mathbf{x})\mathbf{a}^T \mathbf{y}g(…

SpringMVC 入门案例

1.1 添加依赖 在pom文件中添加 javax.servlet-api 和 spring-webmvc 依赖&#xff1b; javax.servlet-api&#xff1a;主要用于 JAVA Web 开发&#xff1b; spring-webmvc&#xff1a;SpringMVC 依赖&#xff1b; <dependencies><dependency><groupId>javax.…

Xilinx ZYNQ 7000 AXI GPIO 读写/中断

打开SDK 后&#xff0c;创建官方例程 打开官方例程后&#xff0c;会发现这个AXI GPIO设置和 PS MIO/EMIO一模一样 int main(void) {int Status;volatile int Delay;/* Initialize the GPIO driver */Status XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);if (Status…

unity-概念与实操入门

文章目录编译器推荐&#xff08;Rider&#xff09;坐标世界坐标系相对坐标系资源商店快捷入口地面制作脚本新建脚本生命周期vs测试打印对象标签&#xff08;自带集合属性&#xff09;图层预设体创建预设体&#xff08;cocos相同&#xff09;定位预设体文件位置预设体添加、更新…

python第一次作业

目录 1.下列程序运行结果为&#xff1a; 2.下列程序运行结果为&#xff1a; 3.下列程序运行结果为&#xff1a; 4.下列程序运行结果为&#xff1a; 5.编写程序&#xff1a;从键盘输入两个两位数&#xff0c;组成一个新的四位数&#xff0c; 6.编写程序功能如下&#xff1a…

网络编程套接字----TCP协议

文章目录前言一、简单TCP网络程序二、TCP socket API 详解socket()bind()listen()accept()connect()三、TCP网络编程头文件日志文件客户端服务器单进程版本多进程版本多线程版本四、线程池版的TCP更改提供的服务总结前言 接着上节课我们讲了udp套接字网络编程,这节课我来给大家…

【C++基础】11:文件操作

文件操作 OVERVIEW文件操作一、文本文件&#xff1a;1.指定打开方式&#xff1a;2.文本文件的写操作&#xff1a;3.文本文件的读操作&#xff1a;二、二进制文件&#xff1a;1.二进制文件的写操作&#xff1a;2.二进制文件的读操作&#xff1a;程序运行时产生的数据都属于临时的…

JAVA设计模式--行为型模式--状态模式

1.状态模式&#xff08;State Pattern&#xff09; 1.1介绍 类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 1.2意图&#xff1a; 允许对象在…

Python数据分析案例16——水质检测(支持向量机)

本次带来图片分类的案例&#xff0c;水质检测。 数据展示 五种类别的水质&#xff0c;图片形式储存的&#xff1a; 前面1是代表水质的类别标签&#xff0c;后面是样本个数。 图片特征构建 import numpy as np import pandas as pd import matplotlib.pyplot as plt import o…

pytorch应用(入门5)CNN卷积神经网络、提取层结构、提取参数

目录第一天第二章&#xff1a;简单的神经网络第三章&#xff1a;深度学习工作流程卷积模块介绍卷积池化层池化层书中的代码池化层相关资料提取 &#xff08;各&#xff09;层&#xff08;的&#xff09;结构如何提取参数及自定义初始化LeNetAlexNetVGGNetCIFAR 10VGGNetGoogLeN…

JSP ssh医疗报销管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh 医疗报销管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…