uni-app课程心得体会以及编程思路

uniapp学习心得 作为uniapp的基础底层框架,Vue.js的掌握程度直接决定了你能够如何使用uniapp,特别是在使用Vue的生命周期函数时,更是需要深入理解Vue的整个生命周期。总结:通过以上学习心得,我认为,掌握vue.js的基础知识和熟练使用uniapp框架、注意跨平台的兼容性问题、合理利用第三方插件、以及重视代码优化和重构,是成为一个优秀的uniapp开发者的基本条件。在开发过程中,你需要时刻关注不同平台的差异,特别是在样式和布局方面,不同平台的兼容性问题尤为突出。2.熟悉uniapp框架的使用方法。 阅读详情

 一.心得体会   


  1.uniapp具有跨平台的特性,可以使用同样的代码在多个平台(如H5、小程序、App)上进行开发,极大地提高了开发效率和代码复用率。这也意味着在开发时,可以快速地经过调试和测试,在不同平台上发布应用程序,加快开发和部署的速度。

   2.uniapp提供了丰富的组件库和插件,可以轻松地创建各种界面和交互元素,如图标、弹出框、下拉刷新等等,可以满足开发需求,加快开发进度,提高开发效率。而且,uniapp具有灵活的扩展性,可以自定义组件和插件,满足开发中的特殊需求。

3.uniapp提供了完善的文档和社区支持,可以很容易地获取使用说明、示例代码、常见问题解答等帮助信息,并且可以在开发过程中获取社区的支持和帮助。这些文档和社区资源,可以让开发者更好地理解和掌握uniapp的使用方法和技巧。

   uniapp的跨平台特性、丰富的组件库和插件、完善的文档和社区支持,都为开发提供了非常良好的开发环境和体验,是一个非常优秀的前端开发框架。

1.Uniapp是基于vue.js的跨平台开发框架,学习 UniApp 需要先掌握 Vue.js 的基础知识。主要包括 Vue.js 的生命周期、数据绑定、组件、指令等概念。通过本学期uniapp的学习巩固了前端Vue.js框架的知识。
2.UniApp 的主要特点之一就是跨平台开发能力,在开发过程中要考虑到不同平台的差异,比如uploadFile方法的多文件上传参数files在app端和H5端能使用而在微信小程序端就不支持多文件上传无法使用files参数。如下代码所示
              

  uni.uploadFile({
                    files:files,
                    formData:{
                        "content":this.commentContent,
                        "productId":productId
                    },

3.在学习过程中通过查找官方文档解决学习中遇到的一些问题,有效地提高了自学能力。
4.UniApp 推崇的是组件化思想,这种思想可以帮助我们将一个复杂的应用程序分解成多个独立的组件,使得开发、测试和维护更加容易。同时,组件化思想也可以促进代码的复用和协作,提高开发效率。

5.在学习uniapp的重要部分组件时,我们需要考虑到组件的可复用性和扩展性,尽量将组件的样式和行为封装起来,使得组件的使用更加简单和方便。同时,我们需要将组件的可配置项尽量抽象出来,以方便未来的扩展和修改。在设计组件时还要考虑到全局和局部,UniApp 组件的样式可以使用全局样式和局部样式,我们需要根据组件的使用情况和需求来设计样式,尽量使得组件的样式和整个应用的样式保持一致,同时也需要考虑到组件的局部样式和全局样式之间的优先级关系。

6.页面路由跳转

页面路由是指不同页面之间的跳转和切换。在 Uniapp 中,我们可以通过编写代码来实现页面的跳转,比如通过点击按钮或者链接来触发跳转。

在 Uniapp 中,页面路由有两种模式:uni-app 和 vue-router。uni-app 是官方提供的路由模式,其特点是简单易用,适合快速开发。vue-router 则是基于 Vue.js 的路由模式,更加灵活和强大,适合复杂应用程序的开发。 在编写页面路由的过程中,需要注意页面的生命周期。在页面跳转时,当前页面的生命周期会被触发,可以在生命周期函数中处理一些逻辑,比如清理数据或者保存状态。 在页面路由的实现中,还需要注意一些常见问题,比如页面参数的传递、路由的嵌套和重定向等。这些问题都可以通过学习文档和实践来解决。 7.在实现页面通知的过程中有自定义消息中心和通过getCurrentPages()获取页面对象来实现不同页面之间的通信。自定义消息中心能够在不同页面之间实现消息传递从而实现页面之间的通信。而getCurrentPages()方法是通过获取当前页面栈的所有页面实例,并通过获取的所有栈中获取需要通信的页面。这就受到页面打开顺序的影响,而消息通知中心能够更加随心所欲的进行不同页面之间的消息传递。 以下为消息通知中心实现代码

//1.用数组保存所有注册的通知(包含名称、要执行的代码、观察者)

let notices = [];
/**
 * 2.注册通知到通知中心
 * @param {String} name 消息名称
 * @param {Function} selector 对应的通知函数
 * @param {Object} observer 观察者
 */
function add(name,selector,observer){
    notices.push({
        name: name,
        selector: selector,
        observer: observer,
    })
}
/**
 * 3.通知成功移除消息
 * @param {String} name 消息名称
 * @param {Object} observer 观察者
 */
function remove(name,observer){
    for(let i=0;i<notices.length;i++){
        if(notices[i].name==name&&notices[i].observer==observer){
            notifications.splice(i, 1);
            break;
        }
    }
}
/**
 * 4.发送通知
 * @param {String} name 消息名称
 * @param {Object} param 通知参数
 */
 function post(name,param){
     notices.forEach(notice=>{
         if(notice.name==name){
             notice.selector(param)
         }
     })
 }
 
 module.exports = {
     add,
     remove,
     post
 }

 8.在 UniApp 中,我们可以使用多种方式来进行数据缓存,包括本地存储、缓存组件和插件等。本地存储可以使用 uni.setStorageSync() 和 uni.getStorageSync() 方法实现,缓存组件可以使用 $refs.cache.set() 和 $refs.cache.get() 方法实现,而插件的使用方法和功能因插件而异。需要注意的是,本地存储的数据大小不能超过 10MB,同时对于需要在不同页面之间共享的数据,建议使用本地存储或其他方式来实现。
         

       //异步
                uni.setStorageSync()
                uni.getStorageSync()
                //同步
                uni.setStorage({
                    key:""
                    data:""
                })
                uni.getStorage({
                    key:"",
                })

Uniapp 是一种基于 Vue.js 框架的跨平台开发框架,可以使用 Vue.js 的语法和组件编写跨 iOS、Android、H5 等多端应用程序。Uniapp 提供了许多原生应用程序框架和浏览器提供的 API、插件、组件等功能,方便开发者进行多端应用程序的开发。Uniapp 的特点有:

1. 组件、API 和功能丰富: Uniapp 提供了许多适用于多端开发的组件、API 和功能,开发者可以编写一套代码并同时适用于多个平台。

2. 兼容性好: Uniapp 提供了兼容多个平台的高效解决方案,无需考虑不同平台的兼容问题,大大提高了开发效率。

3. 开发效率高: Uniapp 提供了许多快速开发工具和插件,可以极大地提高开发速度和效率。

4. 支持原生应用程序: Uniapp 可以编译成原生应用程序,并且支持原生应用程序的调用和功能扩展。

总之,Uniapp 是一个非常适合跨平台开发的框架,开发者可以轻松地编写出同时适用于多个平台的应用程序,大大降低了开发成本和时间。

二.编程思路


以黑马优购商城为例
 黑马优购是一个电商平台,主要经营范围包括各种商品的销售和物流配送服务。它提供了一个在线购物平台,让用户可以在网上购买自己需要的商品。同时,黑马优购也提供安全、快速、可靠的配送服务,用户购买的商品可以通过黑马优购配送到家。

用到的编程开发工具:HBuilder X、微信开发者工具等。
1.项目接口文档:https://www.showdoc.com.cn/128719739414963/2516997897914014
2.帮助文档
uni-app官网:DCloud - HBuilder、HBuilderX、uni-app、uniapp、5+、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架

阿里巴巴字体图标官网:iconfont-阿里巴巴矢量图标库

菜鸟教程:菜鸟教程 - 学的不仅是技术,更是梦想!

阮一峰的flex教程:Flex 布局教程:语法篇 - 阮一峰的网络日志

Vue官网:https://cn.vuejs.org/v2/guide/

微信小程序官网:微信开放文档

3.项目搭建


 在HBuilder X 里面新建一个ui-app项目


#3.2目录结构

#3.3页面

#3.4字符图标
项目使用到以下字符图标

4.首页创建
在pages文件夹下创建index.vue文件(首页面)

#4.2业务逻辑
1.使用tabbar实现底部导航功能

2.使用自定义组件的方式实现 头部搜索框

3.加载 轮播图 数据

4.加载 导航 数据

5.加载 楼层 数据

#4.3关键技术
1.全局样式设置

2.自定义组件 实现 搜索框

3.uni内置 request API

4.swiper 组件

swiper组件标签存在默认的宽度与高度

100%*150px

图片存在默认宽度与高度

320px*240px

5.uni.request的封装


<style lang="scss">
    page {
        padding-top: 90rpx;
    }

    .index-swiper {
        swiper {
            width: 750rpx;
            height: 340rpx;

            image {
                width: 100%;
            }
        }
    }

    .index-cate {
        width: 750rpx;
        display: flex;
        .iamge-box{
            flex: 1;
            padding: 20rpx;
        }
        image {
            width: 100%;
        }
    }
    
    .index-floor{
        width: 750rpx;
        .floor-title{
            image{
                width: 100%;
            }
        }
        
        .floor-list{
            padding: 15rpx;
            .image-box{
                width: 240rpx;
                height: calc(240rpx*386/232);
                float: left;
                
                //计算最后四个图片的高度
                &:nth-last-child(-n+4){
                    height: calc(240rpx*386/232/2);
                    border-left: 10rpx solid #ffffff;
                }
                
                //第2、3张图片的下边框
                &:nth-child(2),&:nth-child(3){
                    border-bottom: 10rpx solid #ffffff;
                }
                
                image{
                    width: 100%;
                    height: 100%;
                }
                
            }
        }
        
    }
</style>

效果图:

完整代码:

<template>
	<view class="index">
		<tcl-header></tcl-header>
		<!-- 轮播图	 -->
		<view class="index-swiper">
			<swiper indicator-dots="true" autoplay="true" interval="3000" duration="1000">
				<swiper-item v-for="(item,index) in swiperList" :key="index">
					<image :src="item.image_src" mode="widthFix"></image>
				</swiper-item>
			</swiper>
		</view>
		<!-- 导航 -->
		<view class="index-cate">
			<view class="iamge-box" v-for="(item,index) in navList" :key="index"  @click="gotfoor()">
				<image :src="item.image_src" mode="widthFix"></image>
			</view>
		</view>
		
		<!-- 楼层 -->
		<view class="index-floor">
			<view v-for="(item,index) in floorList" :key="index"class="floor-group" @tap='onclick(index)' >
				<view class="floor-title">
					<image :src="item.floor_title.image_src" mode="widthFix" class="image-tor"></image>
				</view>
				<view class="floor-list">
					<view v-for="(item2,index2) in item.product_list" :key="index2" class="image-box">
						<image :src="item2.image_src" mode="widthFix" ></image>
					</view>
				</view>
			</view>
		</view>
		
		
	</view>
</template>

<script>
	export default {
		data() {
			return {
				swiperList: [],
				navList: [],
				floorList:[],
			}
		},
		onLoad() {
			this.getSwiperList();//获取轮播图数据
			this.getNavList();//获取导航数据
			this.getFloorList();//获取楼层数据
		},
		methods: {
			onclick(index){
				let name=''
				if(index==0){
					name="女装"
				}else if(index==1){
					name="运动户外"
				}else{
						name="皮具箱包"
				}
				uni.reLaunch({
					url:'/pages/category/category?name='+name
				})
			},
			//没有封装请求
			// getSwiperList() {
			// 	uni.request({
			// 		url: "https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata",
			// 		success: (res) => {
			// 			console.log(res);
			// 			this.swiperList = res.data.message;
			// 		}
			// 	})
			// },
			
			//封装请求
			// getSwiperList(){
			// 	this.$Https({
			// 		url:'/home/swiperdata'
			// 	}).then((res)=>{
			// 		console.log(res);
			// 		this.swiperList=res.message;
			// 	})
			// },
			
			//异步请求
			//async 异步 await 等待
		async getSwiperList(){
			//await 只能在async标识的函数内使用 await 会阻止塞后继续代码运行
				const res=await this.$Https({
					url:'/home/swiperdata'
				});
				console.log(res);
				this.swiperList=res.message;
			},
			
			//没有封装请求
			// getNavList() {
			// 	uni.request({
			// 		url: "https://api-hmugo-web.itheima.net/api/public/v1/home/catitems",
			// 		success: (res) => {
			// 			console.log(res);
			// 			this.navList = res.data.message;
			// 		}
			// 	})
			// },
			
			//封装请求
			// getNavList(){
			// 	this.$Https({
			// 		url:'/home/catitems'
			// 	}).then((res)=>{
			// 		console.log(res);
			// 		this.navList=res.message;
			// 	})
			// },
			
			//异步请求
			//async 异步 await 等待
			async getNavList(){
				const res=await this.$Https({
					url:'/home/catitems'
				});
				console.log(res);
				this.navList=res.message;
			},
			
			//获取楼层数据
			async getFloorList(){
			const res=await this.$Https({
				url:'/home/floordata'
			});
			console.log(res);
			this.floorList=res.message;
			},
			gotfoor(num){
			uni.switchTab({
				url:'/pages/category/category'
			})
			},
			
		}
	}
</script>

<style lang="scss">
	page {
		padding-top: 90rpx;
	}

	.index-swiper {
		swiper {
			width: 750rpx;
			height: 340rpx;

			image {
				width: 100%;
			}
		}
	}

	.index-cate {
		width: 750rpx;
		display: flex;
		.iamge-box{
			flex: 1;
			padding: 20rpx;
		}
		image {
			width: 100%;
		}
	}
	
	.index-floor{
		width: 750rpx;
		.floor-title{
			image{
				width: 100%;
			}
		}
		
		.floor-list{
			padding: 15rpx;
			.image-box{
				width: 240rpx;
				height: calc(240rpx*386/232);
				float: left;
				
				//计算最后四个图片的高度
				&:nth-last-child(-n+4){
					height: calc(240rpx*386/232/2);
					border-left: 10rpx solid #ffffff;
				}
				
				//第2、3张图片的下边框
				&:nth-child(2),&:nth-child(3){
					border-bottom: 10rpx solid #ffffff;
				}
				
				image{
					width: 100%;
					height: 100%;
				}
				
			}
		}
		
	}
</style>

 使用uni-app开发黑马优购项目,需要熟练掌握uni-app框架、MVVM架构和相关工具,同时需要有较好的编程和业务处理能力,才能开发出高质量的应用程序。
 

uni-app项目的收获及心得体会 最后,完成项目过程也让我学到了历程管理的技术。规范化开发流程:在项目开始前,需要先确定清楚项目的需求和目标,通过需求分析和技术评估,编写详细的开发规格说明书,按照规范化的流程进行开发,确保项目按时、高质量地完成。技术积累和分享:项目开发过程中,可以通过技术培训、学习、分享等方式积累和提升技术,尤其是针对新技术、新应用场景进行及时研究和掌握,保持技术优势和市场竞争力。用户体验:在项目开发过程中,要始终以用户体验为核心,关注用户需求和体验,优化产品设计和功能实现,提高用户体验和满意度,以促进产品的推广和应用。 阅读详情

相关推荐

uniapp入门超详细教程:如何从零开始搭建项目

uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。本次章节也是博主从零开始搭建uniapp项目,在此过程进行记录,帮助后续查询同时为读者提供讲解,如有异议,欢迎留言。uni-app官网。

weixin_51609337的博客 2万+

uni-app实战在线教育项目/小程序/H5/APP(第二季)

本课程主要是衔接第一季uni-app基础入门课程。实战开发在线教育项目,巩固基础知识。能够自己独立用uniapp开发项目

Uni-App使用低功耗蓝牙连接血压仪测量

1、Uni-APP蓝牙使用流程 在阅读这篇内容之前,建议您详细浏览一遍uni-app官方关于蓝牙和低功耗蓝牙(BLE)使用教程文档 uni-app官方低功耗蓝牙接口,如果您有微信小程序方面的开发经验,那您看这篇文章会很快上手,uni-app官方的蓝牙模块接口均是按照微信小程序的蓝牙模块接口编写。 思路流程 手机上打开蓝牙,设备打开蓝牙 APP初始化蓝牙模块 APP调用蓝牙搜寻设备 APP存储搜寻...

何以解忧唯有杜康 5703

学习uni-app的心得体会总结

3.组件库丰富:uni-app提供了丰富的基础组件库,包括表单组件、布局组件、导航组件等,同时还有开源组件库,例如iview和element等,可以满足多种开发需求。4.调试工具:uni-app提供了灵活的调试和调试工具,使开发者可以更加轻松地进行项目调试和发布,例如可以使用uni-app提供的工具快速跳转到各个组件的代码区域。1.多端运行:uni-app可以基于编写一次代码,运行在多个不同的小程序平台和 APP 平台上, 支持多种平台的应用开发,例如微信小程序、APP、H5等。1.什么是uni-app。

Morli_的博客 1203

uni-app 蓝牙通信

本文简介 点赞 + 关注 + 收藏 = 学会了 这是一次真实的 蓝牙收发数据 的全过程讲解。 本文使用 uni-app + Vue3 的方式进行开发,以手机app的方式运行(微信小程序同样可行)。 uni-app 提供了 蓝牙 和 低功耗蓝牙 的 api ,和微信小程序提供的 api 是一样的,所以本文的讲解也适用于微信小程序。 本文只实现 蓝牙收发数据 功能,至于样式,我懒得调~ 蓝牙相关功能我会逐步讲解。如果你基础好,又急的话,可以直接跳到 『完整代码』的章节查看,那里没废话。 花了几

weixin_39415598的博客 3271

uni-app中使用wx-open-launch-app

在部分场景下,用户在微信内访问网页时需要跳转到 APP 使用完整服务,为此我们提供了以满足微信内网页跳转到 APP 的需求。微信内网页跳转 APP 功能已向全体开发者开放,当用户访问已认证服务号的 JS 接口安全域名时,可以通过“微信开放标签”打开符合条件的 APP。

每天都要努力学习哦~~ 3995

uni-app跨平台开发课程心得

uni-app是一种基于Vue.js框架的跨平台开发技术,它可以快速地将Vue.js开发的应用程序编译为微信小程序、App、H5等多种平台的应用程序。

xxxxcccz的博客 295

iOS和uni-app、unity的融合方案

文章目录引言I 实现思路II 桥接2.1 IOS中调用Unity的方法2.2 uniapp 桥接iOS 引言 项目背景:iOS app内嵌H5和 AR功能,AR使用unity开发。 技术点:unity导出的目标工程Unity-iPhone.xcodeproj 与原生进行融合 I 实现思路 思路1: uniapp 桥接IOS,ios 桥接unity,然后集成为ipa文件,Unity发布到iOS平台得到的是一个Xcode工程,uniapp 这边是个本地资源包。 思路2: 原生APP集成Unity导出的SD

专注于计算机研发知识和资讯分享 1万+

uni - app 跨平台开发课程:收获、实践与进阶

随着5G、人工智能等新技术的快速发展,相关领域还将面临更多机遇与挑战。只有通过这种全方位、多层次的协作创新,才能真正构建起技术可控、应用可靠、发展可持续的数字化生态系统。未来,随着6G、量子计算等前沿技术的突破,这种开放协作的发展模式将显得更为重要。让我们携手共进,在确保安全合规的前提下,充分释放技术创新红利,共建数字文明新纪元。

2302_82101869的博客 858

Bartender 2021破解版安装教程:手把手教你从下载到激活(附详细步骤图)

本文详细介绍了BarTender 2021专业版的安装与高效应用指南,从基础配置到高级条码设计,帮助用户快速掌握标签设计与打印技术。内容涵盖安装步骤、标签模板创建、数据连接与批量打印技巧,以及高级功能如安全策略与自动化集成,适合零售、物流、制造等行业用户提升工作效率。

p4q5r6s7t的博客 2530

半导体领域知识 - 初级入门

半导体领域知识 - 初级入门 知识问答 1. 一个晶圆上根据芯片的大小,可以生产几百、几千、几万个芯片。如下图: 2. 8寸晶圆指的是什么?5nm工艺指的是什么? 8寸晶圆指的是直径为175mm(17.5cm)的晶圆,下面是6/812/18寸晶圆的尺寸以及相关发展历程。目前拥有12寸线的厂商只有5家,一个12寸晶圆厂的成本需要上百亿美金。 5nm工艺指的是在一个具体的芯片上,有很多微型结构(千万、亿级别的晶体管),这些核心基本单元MOS管的栅极宽度尺寸来衡量工艺的精细程度,如果是5nm就被称为5nm工艺

Hello World! 2万+

《对Uni-app课程的学习收获及心得》

关于UNI-APP项目开发的心得

weixin_64606625的博客 511

大模型呼叫中心场景分享之六:大模型外呼IT运维告警——智能监控与自动化响应的未来

在数字化运维(IT Operations)中,实时监控系统健康状态并及时响应告警是保障业务连续性的关键。传统的IT告警方式(如邮件、短信、钉钉/企业微信通知)存在信息过载、响应延迟、人工处理效率低等问题。而大模型(LLM)与语音技术(TTS/ASR)的结合,为IT运维告警提供了更智能的解决方案——大模型外呼告警系统。大模型外呼告警系统正在重新定义IT运维的效率和体验。通过实时语音交互+智能自动化,企业能够将平均故障修复时间(MTTR)从小时级缩短至分钟级。

开源呼叫中心系统FreeIPCC的博客 918

实训报告:uni-app课程心得 一

登录注册

xxxxcccz的博客 731

WSL2 + Open3D点云可视化踩坑全记录:从GLFW报错到VcXsrv配置,一篇讲清所有‘坑’

本文详细解析了在WSL2环境中使用Open3D进行点云可视化时遇到的常见问题,特别是GLFW报错和VcXsrv配置问题。通过系统性的解决方案和高级配置技巧,帮助开发者彻底解决图形显示、驱动加载和库版本冲突等难题,实现高效的点云可视化。

weixin_30627341的博客 96

SIwave仿真手册——信号完整性仿真之S参数的提取(二)

上一篇简单了讲述了软件的各个操作界面,本次博客更新关于的仿真,因为第二章完整的内容比较多,所以分成好几篇博客进行分享。

luohuo9844的博客 1万+

《uni - app 跨平台开发》课程学习:从理论到实践的成长之旅

在专业的学习进程中,《uni - app 跨平台开发》成为了极具价值的核心课程。其前序课程《前端技术》《微信小程序》为深入学习奠定基础,而本课程旨在让我们全面掌握 uni - app 开发的关键技能,从搭建开发环境到完成综合项目,助力我们向前端开发尤其是移动应用开发方向迈进,为未来职业发展筑牢根基。通过《uni - app 跨平台开发》课程的学习,我在专业能力、社会能力、方法能力方面都有显著成长。专业上,从对跨平台开发懵懂无知,到能够独立开发小型应用、参与综合项目;

lvzhou730的博客 964

BEVFusion(mit)最强环境安装,部署复现

BEVFusion作为一项经典的工作,值得深入探索。然而由于配置环境比较麻烦,耽误了一些时间。经过几次成功配置之后,有了一些总结,在这里记录下来,供大家参考避坑,也方便自己下次查阅。

qq_45783225的博客 1万+

uni-app 接入银联H5支付(Java)思路代码

uni-app 接入银联H5支付(Java)思路代码uni-app-web-viewJava(后台部分代码)可以参考官方的Demo取代码 银联文档地址: H5支付. 第一次接触银联支付的话建议 跑一下官方的Demo uni-app目前没有集成银联支付 这个我真的差评~ 不过也提供了解决的思路吧 但是还是差评… uni-app 官方给出的解决方案是用web-view组件跳转到外部页面去唤起支付 直接贴uni-app代码吧 uni-app-web-view 代码片. <template>

lvlang52的博客 6626

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3165

QGis 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中...)

QGis 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中...)

274

【uni-app】uni-app实现聊天页面功能——功能篇(下)

前面我有写关于如何进行聊天页面布局和实现聊天消息滚动到最底部的文章。【uni-app】uni-app实现聊天页面功能——功能篇(上)【uni-app】uni-app实现聊天页面功能(小程序)——布局篇这篇文章是基于这两篇的基础上完善的。主要还是实现以下两个功能:点击聊天框的时候,聊天框随键盘抬起且聊天消息列表滚动到最底部,但整体页面不抬起聊天框textarea根据内容自适应高度,且聊天消息列表随着聊天框的增高而滚动到最底部(说白了就是最底部的消息不会被增高的聊天框给挡住)

hanachann的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

uni_app课程-总结

我们知道,卡片展示的信息一般都比较多,而文字展示的话,由于它比较短,所以能很好地展示出信息来。从图中可以看出,上下两部分的内容是相互独立的,并且上半部分的内容会比下半部分的内容多一些。首页是“每日一图”,这个功能在现在的 APP中也是必不可少的,它能够帮助用户更好地了解平台的活动、商品等内容。在图文详情页中,除了要突出图片之外,还要突出图片的主题信息,这样才能引起用户的兴趣。(1)在 uni中,文字显示非常少,虽然其目的是为了让用户更加方便地查看信息,但从这个角度来说,这样会让用户感到很不舒服。

pan1234pan的博客 199

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

学习uni-app后的心得体会

第二步,HBuilder X为免安装版,直接解压便可以用,第三步,安装插件,选择“工具”-‘插件安装’进入插件安装界面,选择'uni-app'、‘scss/sass编译’并安装。1.进入uni-app项目,单击菜单栏中的‘运行’→‘运行到浏览器’→‘配置web服务器’命令,即可将uni-app项目运行到浏览器中,体验H5版。第一步,启动HBuilder X,创建uni-app。第二步,在弹出页面中,选择‘uni-app’类型,输入名称,选择模版和保存路径,单击‘创建’按钮。项目创建成功后为下方图所示。

xl_555的博客 327

uni-app框架课程学习心得

对于我而言,这种问题并不容易抵消我的不愿意,但我逐渐认识到,代码编程是一种职业技能,是一种必备的能力,可以帮助我更好地完成设计工作。个人在实践过程中,发现掌握更好的编程技能,不只学校的课程指谷是考试分数,而是为了学会使用编程技术,拓宽自己的职业技术壁垒,为未来的工作生涯提前做规划和铺垫。但是,随着学习的深入,我发现自己产生了对代码编程的越来越多的兴趣,因为我逐渐意识到掌握编程技能可以为我的设计工作提供更多的可能性和优势。:Vue.js是uni-app的基础框架,所以学习Vue.js框架的基础知识非常重要。

m0_74205121的博客 351
上一篇: Laravel 框架开发实战心得体会和编程思路
m0_64452718
博客等级 码龄5年 5粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值