当前位置: 首页 > news >正文

【uni-app系列】uni-app从0到1开发实例

目录

  • 一、准备工作
    • 1.接口
    • 2.代码块
  • 二、创建项目
    • 1.创建默认模板项目 news
    • 2.创建 Hello uni-app模板项目 hello-uniapp
  • 三、引入样式文件
  • 四、修改入口页
  • 五、创建详情页
  • 六、运行
  • 七、调试小技巧


一、准备工作

1.接口

本实例实现新闻列表和新闻详情功能,使用到如下接口:
列表接口:
https://unidemo.dcloud.net.cn/api/news
详情接口:
https://unidemo.dcloud.net.cn/api/news/36kr/ + id (id 为新闻id,上个页面传过来的)

2.代码块

开发中使用到 uListMedia 代码块,代码块设置如下:
在这里插入图片描述
自定义代码块:
在这里插入图片描述

"uListMedia": {
    "body": [
		"<view class=\"uni-list\">",
			 "\t<view class=\"uni-list-cell\" hover-class=\"uni-list-cell-hover\" v-for=\"(item,index) in list\" :key=\"index\">",
				  "\t\t<view class=\"uni-media-list\">",
					  "\t\t\t<image class=\"uni-media-list-logo\" :src=\"item.img\"></image>",
					  "\t\t\t<view class=\"uni-media-list-body\">",
						  "\t\t\t\t<view class=\"uni-media-list-text-top\">{{item.title}}</view>",
						  "\t\t\t\t<view class=\"uni-media-list-text-bottom uni-ellipsis\">{{item.content}}</view>",
					  "\t\t\t</view>",
				  "\t\t</view>",
			 "\t</view>",
		 "</view>"
    ],
    "prefix": "ulistmedia",
    "project": "uni-app",
    "scope": "source.vue.html"
}

二、创建项目

1.创建默认模板项目 news

创建新项目 news,选择默认模板,该项目为要开发的实例项目:
在这里插入图片描述

2.创建 Hello uni-app模板项目 hello-uniapp

创建新项目 hello-uniapp,选择默认模板,用于将相关的 js、css、ttf 等文件拷贝至实例项目:
在这里插入图片描述

三、引入样式文件

将 hello-uniapp 的 common 拷贝至 news :
在这里插入图片描述
news 项目的 App.vue 引入 ./common/uni.css:
在这里插入图片描述
将 hello-uniapp 的 static/uni.ttf 拷贝至 news :
在这里插入图片描述

四、修改入口页

修改入口页 news/pages/index/index.vue:
在这里插入图片描述

<template>
	<view class="content">
		<view class="uni-list">
			<view class="uni-list-cell" hover-class="uni-list-cell-hover" v-for="(item,index) in news" :key="index" @tap="openinfo" :data-newsid="item.post_id">
				<view class="uni-media-list">
					<image class="uni-media-list-logo" :src="item.author_avatar"></image>
					<view class="uni-media-list-body">
						<view class="uni-media-list-text-top">{{item.title}}</view>
						<view class="uni-media-list-text-bottom uni-ellipsis">{{item.created_at}}</view>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				news: []
			}
		},
		onLoad() {
			uni.showLoading({
				title: '加载中...',
				mask: false
			});
			uni.request({
				url: 'https://unidemo.dcloud.net.cn/api/news',
				method: 'GET',
				data: {},
				success: res => {
					console.log(res);
					this.news = res.data;
					uni.hideLoading();
				},
				fail: () => {},
				complete: () => {}
			});

		},
		methods: {
			openinfo(e) {
				console.log(e);
				var newid = e.currentTarget.dataset.newsid;
				console.log(newid);
				uni.navigateTo({
					url: '../info/info?newsid=' + newid
				});
			}
		}
	}
</script>

<style>
.uni-media-list-body{height: auto;}
.uni-media-list-text-top{line-height: 1.6em;}
</style>

五、创建详情页

创建详情页 info/info.vue:

<template>
	<view class="content">
		<view class="title">{{title}}</view>
		<view class="art-content">
			<rich-text class="richText" :nodes="strings"></rich-text>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: '',
				strings: ''
			}
		},
		onLoad(e) {
			console.log(e);
			uni.request({
				url: 'https://unidemo.dcloud.net.cn/api/news/36kr/' + e.newsid,
				method: 'GET',
				data: {},
				success: res => {
					console.log(res);
					this.title = res.data.title;
					this.strings = res.data.content;
				},
				fail: () => {},
				complete: () => {}
			});
		},
		methods: {
			
		}
	}
</script>

<style>
.content{padding: 10upx 2%; width: 96%; flex-wrap: wrap;}
.title{line-height: 2em; font-weight: 700; font-size: 38upx;}
.art-content{line-height: 2em;}
</style>

六、运行

运行效果
列表页:
在这里插入图片描述
详情页:
在这里插入图片描述

七、调试小技巧

在 pages.json 加入 condition 配置,可以直达某个页面进行调试:

"condition": { //模式配置,仅开发期间生效
		"current": 0, //当前激活的模式(list 的索引项)
		"list": [{
				"name": "test", //模式名称
				"path": "pages/info/info", //启动页面,必选
				"query": "newsid=5310910" //启动参数,在页面的onLoad函数里面得到。
			}
		]
	}

运行:
在这里插入图片描述

相关文章:

  • matlab编译.net dll及C#调用
  • 很多男性的瘦腰细腿比女性更骨感?原因告诉你,或许他们真没减肥
  • 每日一练--IT冷知识C/C++--第八天
  • 家用电器的检测项目和检测标准有哪些?
  • 迅为龙芯开发板系统编译安装pmoncfg
  • C++11 返回值优化、移动语义及函数返回值构造的重载决议
  • 数据湖:OPPO数据湖统一存储技术实践
  • vue3 setup(基础版)
  • 单例模式c++
  • 猿创征文|Highgo Database安全版安装指导手册
  • 从零开始配置 vim(18)——终端模式
  • 五:Dubbo中Provider参数配置及源码讲解
  • EXTJS 中grid 动态增加列的方法
  • Navicat快速将mysql表转为postgresql表(数据+表结构)
  • 车道线检测传统方法笔记
  • ECMAScript6(0):ES6简明参考手册
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java精华积累:初学者都应该搞懂的问题
  • Just for fun——迅速写完快速排序
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python实现BT种子转化为磁力链接【实战】
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • springboot_database项目介绍
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • yii2中session跨域名的问题
  • 订阅Forge Viewer所有的事件
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 王永庆:技术创新改变教育未来
  • 项目管理碎碎念系列之一:干系人管理
  • 携程小程序初体验
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #WEB前端(HTML属性)
  • (arch)linux 转换文件编码格式
  • (Java)【深基9.例1】选举学生会
  • (k8s中)docker netty OOM问题记录
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (ros//EnvironmentVariables)ros环境变量
  • (第27天)Oracle 数据泵转换分区表
  • (分布式缓存)Redis持久化
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (已解决)什么是vue导航守卫
  • (转)详解PHP处理密码的几种方式
  • .NET : 在VS2008中计算代码度量值
  • .net 托管代码与非托管代码
  • .net访问oracle数据库性能问题
  • .net中调用windows performance记录性能信息
  • []error LNK2001: unresolved external symbol _m
  • [ACTF2020 新生赛]Include
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Angular] 笔记 18:Angular Router
  • [Apio2012]dispatching 左偏树
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)