uni-app项目实战


前言

仿网易云音乐网站写的一个小demo,用node.js写的服务,之前文章介绍过uni-app的基本使用了,所以今天直接介绍写项目的记录

一、封装自己的异步请求

注:封装后可以对所有的请求做一个拦截及域名维护,下面只做简单封装,后续文章会详细介绍promise。

封装思路

  • 基于原生的promise
  • 挂在到Vue原型上
  • 通过this.request的方式来使用

步骤

1、根目录新建utils一般用来存放全局工具类,写在request.js里

export default (params)=> {
	uni.showLoading({
		title:"数据加载中..."
	})
	return new Promise((resolve,reject)=> {
		wx.request({
			...params,
			success(res) {
				resolve(res)
			},
			fail(err) {
				reject(err)
			},
			complete() {
				uni.hideLoading();
			}
		})
	})
}

2、挂在到Vue原型上,这样所有的页面都可以调用这个方法

import request from './utils/request.js'
Vue.prototype.request = request;

3、页面中直接调用

onLoad() {
		this.request({
			url: '',
			data: {},
			...
		}).then(res=> {
			console.log(res)
		})
},

二、uni-app解决跨域问题

有时需要调用接口时,提示跨域问题不要怕,下面两步轻松解决

1、打开manifest.json文件,选择源码视图,在里面添加proxy代理

"devServer": {
       "proxy": {
           "/api": {		             
				"target":"http://dpc.dapeis.net",
                "changeOrigin": true,//是否跨域
                "secure": false,// 设置支持https协议的代理
			 	"pathRewrite":{"^/api":"/"}
           }
       }
}

2、回到当前页面,修改请求路径

this.request({
	url:'/api/image/v3/homepage/vertical',
	data: {
		limit: 50,
		order:'hot',
	}
}).then(res=> {
	console.log(res)
})

这样请求webpack会解析为请求http://dpc.dapeis.net/image/v3/homepage/vertical

三、uni-app

1.引入iconfont

方法如下:

  • 首先选择字体图标,下载字体文件。
  • 把 iconfont.ttf文件拷贝到 static 下。
  • 复制Unicode只要.ttf的那个url ,粘贴到 iconfont.css 文件,如下

在这里插入图片描述

@font-face {
  font-family: "iconfont"; /* Project id  */
  src: url('//at.alicdn.com/t/font_2602797_r0f1rwcswhk.ttf?t=1623222780652') format('truetype');
}
  • 在项目app.vue中引用公共css
@import "./static/iconfont/iconfont.css"

2.安装scss插件

npm install sass-loader node-sass
  • node-sass安装失败及解决方法
  • 在 HbuilderX 工具 -> 插件安装 ->前往插件市场 找到 scss/sass编译 -> 安装
  • 在 style 中 添加 lang 属性,就可以使用scss语法啦
<style lang="scss">
@mixin chennfontclolr($chencolor888,$chenfosize,$chenw){
 color: $chencolor888;
 font:{
  size:$chenfosize;
  weight:$chenw ;
 }
}
</style>

3、组件

组件是在dcloudio插件市场找的uni-app,官方文档示例也不是很全,需要自己摸索哦。

npm i @dcloudio/uni-ui

4、登陆页

login() {
	this.request({
		url:'/api/login',
		data: {
			name:this.name, 
			password:this.pwd
		}
	}).then(res=> {
		if(res.data.code != 200) {
			Toast({
				message: '登录失败,请重试!',
				duration: 5000
			});
			return;
		}
		localStorage.setItem("user", JSON.stringify(res.data.i));
		this.$store.commit("localuser", res.data.i)
		this.$store.dispatch('getlike');
		this.$router.back()
	})
}

微信小程序端运行效果
在这里插入图片描述

5、首页

使用了分段器等组件,微信小程序运行效果如下
在这里插入图片描述

总结

后续demo完善后会上传git,等我补链接哦,未完待续…

### 关于 Uni-app 中实现图书阅读应用的书籍详情页面 在构建基于 `uni-app` 的图书阅读应用程序时,书籍详情页面是一个重要的组成部分。这类页面通常用于展示特定书籍的信息,如封面图片、简介、作者信息等。 #### 创建书籍详情页面的基本流程 为了创建一个功能完善的书籍详情页面,在项目中可以按照如下方式操作: 1. **设置路由** 需要在项目的 `pages.json` 文件中定义新的页面路径以便访问书籍详情页。假设页面文件名为 `bookDetail.vue`,则可以在 `pages.json` 添加相应配置[^3]。 2. **获取数据** 使用 `Vue.js` 提供的数据绑定特性来动态加载并显示每本书的具体信息。可以通过 API 请求从服务器端拉取所需的数据,也可以预先设定一些静态 JSON 数据作为测试用途。 3. **设计布局** 利用 `uni-app` 支持的各种 UI 组件(例如 `<view>`、`<image>` 和 `<text>`),结合 CSS 或者内置样式库来自定义书籍详情界面的设计风格。确保用户体验友好且视觉效果吸引人。 4. **交互逻辑** 对于用户可能执行的操作,比如点击收藏按钮或将书籍加入购物车等功能,则需编写相应的事件处理函数,并通过调用接口完成这些动作。 下面给出一段简单的代码片段用来说明如何在一个 `uni-app` 项目里建立这样的页面: ```html <!-- bookDetail.vue --> <template> <view class="container"> <!-- 显示书籍封面图 --> <image :src="book.coverUrl"></image> <!-- 展示基本信息 --> <view class="info-section"> <h2>{{ book.title }}</h2> <p>Author: {{ book.author }}</p> <p>Description:</p> <div v-html="book.description"></div> </view> <!-- 用户互动区域 --> <button @click="addToCart">Add to Cart</button> </view> </template> <script> export default { data() { return { bookId: '', // 来自参数传递 book: {} // 存储具体一本书籍的信息对象 } }, onLoad(options) { this.bookId = options.id; this.fetchBookDetails(); }, methods: { fetchBookDetails(){ // 这里应该有实际请求API的方法去取得书籍详细资料 console.log(`Fetching details for book with ID ${this.bookId}`); // 模拟异步获取数据过程... setTimeout(() => { const mockData = { id: '1', title: "The Great Gatsby", author: "F. Scott Fitzgerald", coverUrl: "/static/images/greatgatsby.jpg", description: "<p>A novel by American writer F. Scott...</p>" }; if (mockData.id === this.bookId){ this.book = mockData; }else{ console.error('Failed to load correct book detail'); } }, 500); }, addToCart(){ alert(`${this.book.title} has been added into cart.`); } } } </script> <style scoped lang="scss"> .container { padding: 20px; .info-section h2, p { margin-bottom: 8px; } button { display: block; width: fit-content; margin-top: 20px; } } </style> ``` 这段代码展示了如何利用 `uni-app` 构建一个基本但完整的书籍详情查看器。当然这只是一个起点;随着需求的增长还可以进一步扩展其特性和复杂度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值