uniapp前端开发,基于vue3,element plus组件库,以及axios通讯

news2024/11/27 18:48:55

简介

UniApp 是一个基于 Vue.js 的跨平台开发框架,旨在通过一次开发、编译后运行在多个平台上,如 iOS、Android、H5、以及小程序(微信小程序、支付宝小程序、百度小程序等)等。UniApp 为开发者提供了统一的开发体验,使得同一套代码可以在多个平台上运行,从而减少开发和维护成本。

基本上可以直接使用vue的语法,为了可移植性,所以大部分的东西都是用的vue的,少部分,像页面导航,使用uniapp自带的

vue

配置

换淘宝源

npm config set registry https://registry.npm.taobao.org

下载

npm install -g @vue/cli
npm uninstall -g @vue/cli

创建项目

vue create vue01

如果创建遇到报错

error Error: certificate has expired

关闭strict-ssl后再安装

yarn config set strict-ssl false

cd到工程目录之后

npm run dev

存储

localStorage

长期有效

<template>
  <div>
    <input v-model="username" placeholder="输入用户名" />
    <button @click="saveUsername">保存用户名</button>
    <p>存储的用户名:{{ storedUsername }}</p>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';

// 定义数据
const username = ref('');
const storedUsername = ref('');

// 保存用户名到 localStorage
const saveUsername = () => {
  localStorage.setItem('username', username.value);
  storedUsername.value = username.value;
};

// 获取存储的用户名
onMounted(() => {
  const savedUsername = localStorage.getItem('username');
  if (savedUsername) {
    storedUsername.value = savedUsername;
  }
});
</script>

sessionStorage

关闭浏览器后失效,跟本地存储类似

设置数据到 sessionStorage

sessionStorage.setItem('sessionData', 'someValue');

获取 sessionStorage 中的数据:

const sessionData = sessionStorage.getItem('sessionData');
console.log(sessionData); // 'someValue'

删除 sessionStorage 中的数据:

sessionStorage.removeItem('sessionData');

清空 sessionStorage 中的所有数据:

sessionStorage.clear();

生命周期钩子

可以在页面开始挂载时,进行一些操作,如开始监听消息,填充默认数据等

<template>
  <div>
    <p>当前时间:{{ currentTime }}</p>
    <button @click="stopTimer">停止计时</button>
  </div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';

const currentTime = ref('');
let timer = null;

// 组件挂载后开始计时
onMounted(() => {
  timer = setInterval(() => {
    currentTime.value = new Date().toLocaleTimeString();
  }, 1000);
});

// 组件销毁之前清除定时器
onBeforeUnmount(() => {
  clearInterval(timer);
});
</script>

route

uniapp中路由使用自带的uni.navigateTo()跳转

npm install vue-router@4

uniapp

页面跳转

pageA

<!-- pageA.vue -->
<template>
  <view>
    <button @click="goToPageBWithParams">跳转到页面B并传递参数</button>
    <button @click="goToPageB">跳转到页面B不传递参数</button>
  </view>
</template>

<script setup>
import { ref } from 'vue';

const goToPageBWithParams = () => {
  uni.navigateTo({
    url: '/pages/pageB/pageB?name=John&age=25'
  });
};

const goToPageB = () => {
  uni.navigateTo({
    url: '/pages/pageB/pageB'
  });
};
</script>

pageB

<!-- pageB.vue -->
<template>
  <view>
    <text v-if="name && age">名字:{{ name }}, 年龄:{{ age }}</text>
    <text v-else>没有接收到参数</text>
  </view>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { useRoute } from 'vue-router';

const name = ref('');
const age = ref('');

onMounted(() => {
  const route = useRoute();
  
  // 获取查询参数
  name.value = route.query.name || '';
  age.value = route.query.age || '';
});
</script>

也可以使用页面栈来获取查询参数

  // 获取当前页面的 query 参数
  const pages = getCurrentPages();
  const currentPage = pages[pages.length - 1];
  const { name: pageName, age: pageAge } = currentPage.options;

  name.value = pageName || '';
  age.value = pageAge || '';

页面栈

在 UniApp 中,页面栈是管理页面之间跳转和返回的一个重要机制。每次打开一个新页面,当前页面会被压入栈中,新的页面会成为栈顶的页面。当用户返回时,栈顶的页面被移除,返回到之前的页面。UniApp 的页面栈管理类似于浏览器的历史记录机制。以下是一些主要概念:

  1. 页面栈限制

UniApp 的页面栈最多允许 10 层页面(这可以通过 H5 端的history模式来拓展),超过限制时,会自动将底部的页面出栈,从而保持页面栈的数量。

  1. 页面跳转方式
  • uni.navigateTo: 进入新页面时,新页面会被压入页面栈,当前页面保持在栈中,适合在栈内管理跳转。
  • uni.redirectTo: 替换当前页面,不会保留当前页面到栈中,适用于不希望用户返回之前页面的场景。
  • uni.reLaunch: 清空整个页面栈,打开指定的页面,一般用于登录页面、首页等。
  • uni.switchTab: 切换到tabBar页面,不会涉及页面栈管理,因为tabBar页面是独立的。
  1. 页面返回
  • uni.navigateBack: 返回上一个页面,默认返回一层,可以通过传入参数指定返回的页面层级。
  1. 生命周期与页面栈的关系

每当页面栈发生变化,页面生命周期函数也会相应地触发:

  • onLoad: 页面第一次加载时触发。
  • onShow: 每次页面显示时触发,包括返回时。
  • onHide: 页面隐藏时触发,通常是在页面跳转到其他页面时触发。

这种页面栈机制帮助开发者在管理多页面应用时,更好地控制页面间的导航和返回操作。

如果有具体的应用场景或问题,也可以进一步探讨如何使用页面栈。

可以用如下代码打印关于页面栈的信息

  // 获取当前页面栈
  const pages = getCurrentPages(); 
  
  // 打印页面栈
  console.log(pages);
  
  // 打印页面栈的长度(当前打开的页面数量)
  console.log("页面栈长度: ", pages.length);
  
  // 获取栈顶页面(当前显示的页面)
  const currentPage = pages[pages.length - 1];
  console.log("当前页面路径: ", currentPage.route);
  console.log("当前页面参数: ", currentPage.options);

Element plus

简介

一个基于vue3组件库,挺好看的.嗯

配置

安装

npm install element-plus

修改配置文件main.js中vue3部分

import App from './App'

import { createSSRApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

export function createApp() {
  const app = createSSRApp(App)
  app.use(ElementPlus) // 挂载 ElementPlus
  return {
    app
  }
}

示例代码

<template>
  <div>
    <el-input v-model="inputValue" placeholder="请输入内容" style="width: 300px;"></el-input>
    <el-button type="primary" @click="handleClick" style="margin-left: 10px;">提交</el-button>
    <p>输入的内容:{{ inputValue }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue';

const inputValue = ref('');

const handleClick = () => {
  alert(`你输入的内容是:${inputValue.value}`);
};
</script>

图标库

npm install @element-plus/icons-vue

使用

<template>
  <div>
    <el-button type="primary">
		<el-icon>
		  <search />
		</el-icon>     
      搜索
    </el-button>

    <el-button type="success">
		<el-icon>
		  <edit />
		</el-icon>     
      编辑
    </el-button>

    <el-button type="danger">
		<el-icon>
		  <delete />
		</el-icon>
       删除
    </el-button>

    <el-button>
      <el-icon>
        <refresh />
      </el-icon>
      刷新
    </el-button>

    <el-button type="warning">
      <el-icon>
        <share />
      </el-icon>
      分享
    </el-button>
  </div>
</template>

<script setup>
import { Search, Edit, Delete, Refresh, Share } from '@element-plus/icons-vue';
import { ElButton, ElIcon } from 'element-plus';

</script>

axios

简介

用于前后端交换数据,通过url与后端连接

url

一个完整的URL(Uniform Resource Locator,统一资源定位符)通常由以下几个部分组成:

  1. 协议(Scheme/Protocol)

    • 定义访问资源所用的协议,例如httphttpsftp等。
    • 格式:http://https://
  2. 域名(Domain Name)或IP地址

    • 标识资源所在的服务器地址,例如www.example.com192.168.1.1
    • 也可以包含www子域,或是更具体的子域名如blog.example.com
  3. 端口号(Port)

    • 指定服务器上运行的特定服务的端口,默认为80(HTTP)或443(HTTPS),通常省略。
    • 格式::8080
  4. 路径(Path)

    • 服务器上资源的具体位置,通常类似于文件系统路径,如/folder/page.html
    • 如果没有路径,通常默认指向网站的根目录。
  5. 查询参数(Query Parameters)

    • 包含键值对,用于传递给资源的参数,通常用于动态页面或API请求。

    • 动态页面如根据id显示不同的界面,API请求如rest风格的接口

    • 一般在get里面定位资源,在post里面应用一般都是API版本控制、分页、身份验证、路径补充、兼容性支持等场景,以便保持API接口的一致性和简洁性。

    • 格式:?key1=value1&key2=value2

  6. 片段标识符(Fragment Identifier)

    • 指向资源内的某个位置,如页面内的锚点。
    • 在wiki百科中经常用到定位某个标签https://en.wikipedia.org/wiki/Wiki#Conferences
    • 格式:#section1

示例URL:

https://www.example.com:8080/folder/page.html?search=query#section1

配置

npm i axios

示例

<template>
  <div>
    <div @click="fetchData" class="box">Click me to GET data</div>
    <button @click="sendData">Send POST Request</button>
    <div v-if="data">
      <h3>Data from GET request:</h3>
      <pre>{{ data }}</pre>
    </div>
	
    <div v-if="postResponse">
      <h3>Response from POST request:</h3>
      <pre>{{ postResponse }}</pre>
    </div>
  </div>
</template>

<script setup>
import axios from 'axios'
import { ref } from 'vue'

const data = ref(null)
const postResponse = ref(null)

async function fetchData() {
  try {
    const res = await axios.get("http://localhost:8088/user/list")
    data.value = res.data
    console.log(res, "Data received from GET request")
  } catch (error) {
    console.error("Error fetching data:", error)
  }
}

async function sendData() {
  try {
    const payload = { key: 'value' } // Replace with actual data to send
    const res = await axios.post("http://localhost:8088/user/add", payload)
    postResponse.value = res.data
    console.log(res, "Data received from POST request")
  } catch (error) {
    console.error("Error sending data:", error)
  }
}
</script>

<style scoped>
.box {
  cursor: pointer;
  padding: 10px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  text-align: center;
}
</style> 

库封装

因为需要很多与后端的接口,所以我们进行封装,减少调用复杂度

import axios from 'axios';
import { ElMessage } from 'element-plus';

// 创建axios实例
const http = axios.create({
  baseURL: 'http://localhost:8080', // 设置基础URL
  timeout: 5000, // 设置超时时间
});

// 请求拦截器
http.interceptors.request.use(
  config => {
    // 在请求发送之前做些什么,比如添加 token 等
    // config.headers.Authorization = `Bearer ${getToken()}`;
    return config;
  },
  error => {
    // 请求错误处理
    ElMessage.error('请求发送失败');
    return Promise.reject(error);
  }
);

// 响应拦截器
http.interceptors.response.use(
  response => {
    // 处理响应成功
    if (response.status === 200) {
      return response.data;
    }
    ElMessage.error('服务器异常');
    return Promise.reject(response);
  },
  error => {
    // 处理响应失败
    const status = error.response ? error.response.status : null;
    if (status === 404) {
      ElMessage.error('请求的资源未找到');
    } else if (status === 500) {
      ElMessage.error('服务器内部错误');
    } else {
      ElMessage.error('网络错误,请稍后重试');
    }
    return Promise.reject(error);
  }
);

// 封装常用请求方法
export const get = (url, params = {}) => http.get(url, { params });
export const post = (url, data = {}) => http.post(url, data);
export const put = (url, data = {}) => http.put(url, data);
export const del = (url, data = {}) => http.delete(url, { data });

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

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

相关文章

技术文档的高质量翻译对俄罗斯汽车推广的影响

进入新市场需要的不仅仅是一个伟大的产品&#xff1b;它要求深入了解当地消费者的期望、法规和文化差异。对于希望在俄罗斯取得成功的国际汽车制造商来说&#xff0c;技术文件的质量是一个关键因素。手册、规范和服务指南在产品和用户之间形成了直接的桥梁&#xff0c;影响着客…

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 树结构 封装为组件使用

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 树结构 【组件】前端ElementUi 下拉Tree树形组件 带模糊 https://live.csdn.net/v/436057 单独使用 <template><div><el-popoverstyle"overflow-y: auto; "placement"bottom…

论文阅读:Dual-disentangled Deep Multiple Clustering

目录 摘要 引言 模型 实验 数据集 实验结果 结论 摘要 多重聚类近年来引起了广泛关注&#xff0c;因为它能够从不同的角度揭示数据的多种潜在结构。大多数多重聚类方法通常先通过控制特征之间的差异性来提取特征表示&#xff0c;然后使用传统的聚类方法&#xff08;如 …

SQL 复杂查询

目录 复杂查询 一、目的和要求 二、实验内容 &#xff08;1&#xff09;查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。&#xff08;分别采用子查询和连接方式实现&#xff09; 查询出每个订单的消费者姓名及联系方式。 在…

thread_id_key != 0x7777(`fibers` 包与 Node.js 16 及以上版本存在兼容性问题)

文章目录 fibers4.0.3 与 node-v16.13.2-win-x64 的兼容性1. Node.js 版本兼容性2. 特定包版本 (fibers4.0.3)3. 解决方案和替代方案 结论解决方案 运行yarn serve 启动项目&#xff0c;就会弹出上述错误。 fibers4.0.3 与 node-v16.13.2-win-x64 的兼容性 要判断 fibers4.0.3…

数据结构 (6)栈的应用举例

1. 递归调用 递归函数在执行时&#xff0c;会将每一层的函数调用信息&#xff08;包括局部变量、参数和返回地址&#xff09;存储在栈中。当递归函数返回时&#xff0c;这些信息会从栈中弹出&#xff0c;以便恢复之前的执行状态。栈的后进先出&#xff08;LIFO&#xff09;特性…

网络安全在数字时代保护库存数据中的作用

如今&#xff0c;通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而&#xff0c;技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要&#xff0c;而且必不可少。 了解网络安全及其…

php常用伪协议整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理php常见的伪协议 php伪协议介绍 直观点&#xff0c;就是php可以识别的协议。 类似于我们访问网站的http协议&#xff0c;我们用浏览器访问我们自己本地文件的file协议等。 php可以识别这些协议&#xf…

【软件入门】Git快速入门

Git快速入门 文章目录 Git快速入门0.前言1.安装和配置2.新建版本库2.1.本地创建2.2.云端下载 3.版本管理3.1.添加和提交文件3.2.回退版本3.2.1.soft模式3.2.2.mixed模式3.2.3.hard模式3.2.4.使用场景 3.3.查看版本差异3.4.忽略文件 4.云端配置4.1.Github4.1.1.SSH配置4.1.2.关联…

【SpringBoot】28 API接口防刷(Redis + 拦截器)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括&#xff1a;防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等&#xff0c;以确保接口的安全性。 常见措施 1&#xff09;防火墙 防火墙是网络安全中最基本的安全设备之一&#xff0c…

零基础学安全--shell脚本学习(1)脚本创建执行及变量使用

目录 学习连接 什么是shell shell的分类 查看当前系统支持shell 学习前提 开始学习 第一种执行脚本方法 ​编辑 第二种执行脚本方法 第三种执行脚本方法 变量声明和定义 ​编辑 查看变量 删除变量 学习连接 声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣…

基于FPGA的FM调制(载波频率、频偏、峰值、DAC输出)-带仿真文件-上板验证正确

基于FPGA的FM调制-带仿真文件-上板验证正确 前言一、FM调制储备知识载波频率频偏峰值个人理解 二、代码分析1.模块分析2.波形分析 总结 前言 FM、AM等调制是学习FPGA信号处理一个比较好的小项目&#xff0c;通过学习FM调制过程熟悉信号处理的一个简单流程&#xff0c;进而熟悉…

“AI玩手机”原理揭秘:大模型驱动的移动端GUI智能体

作者&#xff5c;郭源 前言 在后LLM时代&#xff0c;随着大语言模型和多模态大模型技术的日益成熟&#xff0c;AI技术的实际应用及其社会价值愈发受到重视。AI智能体&#xff08;AI Agent&#xff09;技术通过集成行为规划、记忆存储、工具调用等机制&#xff0c;为大模型装上…

路由策略与路由控制实验

AR1、AR2、AR3在互联接口、Loopback0接口上激活OSPF。AR3、AR4属于IS-IS Area 49.0001&#xff0c;这两者都是Level-1路由器&#xff0c;AR3、AR4的系统ID采用0000.0000.000x格式&#xff0c;其中x为设备编号 AR1上存在三个业务网段A、B、C&#xff08;分别用Loopback1、2、3接…

uniapp开发微信小程序笔记8-uniapp使用vant框架

前言&#xff1a;其实用uni-app开发微信小程序的首选不应该是vant&#xff0c;因为vant没有专门给uni-app设置专栏&#xff0c;可以看到目前Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 但是vant的优…

Qt-系统相关(1)事件文件

Qt事件 事件介绍 事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当⽤⼾按下⿏标、敲下键盘&#xff0c;或者是窗⼝需要重新绘制的时候&a…

HarmonyOS4+NEXT星河版入门与项目实战(20)------状态管理@ObjectLink @Observed

文章目录 1、用法图解2、案例实现1、任务类改造2、参数改造变量3、完整代码4、运行效果4、总结1、用法图解 2、案例实现 上一节的案例中,一直有一个功能没有生效,就是任务完成后对应的任务行变灰,任务字体出现中划线删除的效果。而该功能一直不生效的原因就是要改变的数据值…

【小白学机器学习36】关于独立概率,联合概率,交叉概率,交叉概率和,总概率等 概念辨析的例子

目录 1 先说结论 2 联合概率 3 边缘概率 4 (行/列)边缘概率的和 总概率1 5 条件概率 5.1 条件概率的除法公式 5.2 条件概率和联合概率区别 1 先说结论 关于独立概率&#xff0c;联合概率&#xff0c;交叉概率&#xff0c;交叉概率和&#xff0c;总概率 类型含义 …

TCP IP协议和网络安全

传输层的两个协议&#xff1a; 可靠传输 TCP 分段传输 建立对话&#xff08;消耗系统资源&#xff09; 丢失重传netstat -n 不可靠传输 UDP 一个数据包就能表达完整的意思或屏幕广播 应用层协议&#xff08;默认端口&#xff09;&#xff1a; httpTCP80 网页 ftpTCP21验证用户身…

redmi 12c 刷机

刷机历程 一个多月前网购了redmi 12c这款手机, 价格只有550,用来搞机再适合不过了, 拆快递后就开始倒腾,网上有人说需要等7天才能解锁,我绑定了账号过了几天又忍不住倒腾,最后发现这块手机不用等7天解锁成功了,开始我为了获取root权限, 刷入了很火的magisk,但是某一天仍然发现/…