【uni-app】uni-app基础知识
目录
- 1.uni-app的初体验
- 1.1 开发方式
- 1.2 脚手架搭建项目
- 1.3 搭建过程可能出现的问题
- 2. 项目结构介绍
- 2.1 项目目录
- 3. 样式和sass
- 3.1 rpx,vw,vh
- 3.2 安装sass依赖
- 3.3 vue组件中,style标签上加上 lang=scss
- 4. 基本语法
- 4.1 数据的展示
- 4.2 数据的循环
- 4.3 条件编译
- 4.4 计算属性
- 5. 事件
- 5.1 事件的使用
- 6. 组件
- 6.1 组件的简单使用
- 1. 组件的定义
- 2. 组件的引入
- 3. 组件的注册
- 4. 组件的使用
- 6.2 组件传参
- 1. 父向子传递参数
- 2. 子向父传递参数
- 3. 全局共享数据
- 6.3 组件插槽
- 7 生命周期
- 7.1 常用生命周期
- 7.2 完整生命周期
- 使用 uni-app 开发 微信小程序,
1.uni-app的初体验
1.1 开发方式
- 使用 DCloud 公司提供的 HBuilderX 来快速开发
- 使用脚手架来快速搭建和开发
1.2 脚手架搭建项目
(这些命令都是可以执行的)
- 全局安装
npm install -g @vue/cli
- 创建项目
vue create -p dcloudio/uni-preset-vue my-project
- 启动项目
npm run dev:mp-weixin
- 微信小程序开发者工具导入项目
my-project5\dist\dev\mp-weixin
1.3 搭建过程可能出现的问题
容易出现 vue 和 vue-template-complier 版本不一致的问题
此时根据提示 重新安装对应的 vue 版本即可 npm install vue@2.6.10
然后在重新运行项目 npm run dev:mp-weixin
2. 项目结构介绍
2.1 项目目录
官方文档 https://uniapp.dcloud.io
3. 样式和sass
3.1 rpx,vw,vh
<template><view class="content"><view class="rpx">rpx</view><view class="vw">vw</view></view>
</template><script>
</script><style>.rpx{/* rpx 小程序单位 750rpx = 屏幕的宽度 */width: 750rpx;height: 100px;background-color: #007AFF;}.vw{/* vw h5单位 100vw = 屏幕的宽度 100vh = 屏幕的高度 */width: 50vw;height: 100px;background-color: #DD524D;}
</style>
3.2 安装sass依赖
npm i node-sass sass-loader
我安装的时候报了一个错
Error: Command failed: F:\python\Python37\python.EXE -c import sys; print “%s.%s.%s” % sys.version_info[:3];
Error: Can’t find Python executable “python”, you can set the PYTHON env variable.
我把 Python 删除,也没好·,我也很纳闷
我就安装cnpm
cnpm install
使用 cnpm安装sass
cnpm i node-sass sass-loader
成功了
3.3 vue组件中,style标签上加上 lang=scss
<template><view class="content"><view class="rpx">rpx11</view><view class="vw">vw</view><view class="sass">sass1</view></view>
</template><script>
</script><style lang="scss">.rpx{}.vw{}.content{.sass{background-color: #710909;color: $uni-bg-color;}}
</style>
4. 基本语法
4.1 数据的展示
- 在 js 的 data 中定义数据
- 在 template 中通过 {{ 数据 }} 来显示
- 在标签的属性上通过 :data-index=‘数据’ 来使用
<template><view class="content"><view>{{title}}</view><image :src="color"></image></view>
</template><script >
export default {data() {return{title: "这个是标题",color: "../../static/logo.png"};}
}
</script><style>
</style>
4.2 数据的循环
- 通过 v-for 来指定要循环的数组
- item 和 index 分别位 循环项 和 循环索引
- :key 指定唯一的属性,用来提高循环效率
<template><view class="content"><view v-for="item in list" :key="item.id">{{item.id}}---{{item.text}}</view></view>
</template><script >
export default {data() {return{list: [{id:1,text:'橙子'},{id:2,text:'橘子'},{id:3,text:'桃子'}]};}
}
</script><style>
</style>
4.3 条件编译
- 通过 v-if 来决定显示和隐藏 不适合做频繁的切换显示
- 通过 v-show 来决定显示和隐藏 合适做频繁的切换显示
<view v-if="true">显示1</view>
<view v-if="false">看不到2</view>
<view v-show="true">显示3</view>
<view v-show="false">看不到4</view><view v-if="true">1111</view>
<view v-else-if="true">2222</view>
<view v-else>3333</view>
4.4 计算属性
- 可以理解为是对 data 中的数据提供了一种 加工 或者 过滤的能力
- 通过 computed 来定义计算属性
<template><view class="content"><view>{{cnMoney}}</view><view v-for="item in filterList" :key="item.id">{{item.id}}---{{item.text}}</view></view>
</template><script >
export default {data() {return{money: 10000,list: [{id:1,text:'橙子'},{id:2,text:'橘子'},{id:3,text:'桃子'}]};},computed:{//加工数据cnMoney(){return "¥" + this.money;},//过滤数组filterList(){//只要 id > 2 都不要显示return this.list.filter(v=>v.id<=2);}}
}
</script><style>
</style>
5. 事件
5.1 事件的使用
- 注册事件 @click= “handleClick”
- 定义事件监听函数 需要在 “methods” 中定义
- 事件的传参
<template><view class="content"><view data-index="11" @click="handleClick(1,$event)">点我</view><view data-index="22" @click="handleClick(2,$event)">点我</view></view>
</template><script>export default{ methods:{handleClick: (x,event) => {console.log("我不想努力了"+x);console.log(event);console.log(event.currentTarget.dataset.index);}}}
</script><style>
</style>
6. 组件
6.1 组件的简单使用
1. 组件的定义
- 在 src 目录下新建 文件夹
- 在 components 目录下直接新建组件 *.vue
<template><image src="/static/logo.png"></image>
</template><script>export default{}
</script><style>
</style>
2. 组件的引入
- 在页面中 引入 组件 "import 组件名 from ‘组件路径’ "
3. 组件的注册
- 在页面中实例中,新增属性 components
- 属性 components 是一个对象,把组件放进去注册
4. 组件的使用
- 在页面的标签中,直接使用引入的组件 “<组件></组件>”
<template><view class="content"><!-- 4 使用组件,官方推荐不用大写 --><imgBorder></imgBorder><img-border></img-border></view>
</template><script>//2.引入自定义组件import imgBorder from "@/components/img-border.vue"export default{ //3.组件注册components:{imgBorder:imgBorder},methods:{handleClick: (x,event) => {console.log("我不想努力了"+x);console.log(event);console.log(event.currentTarget.dataset.index);}}}
</script><style>
</style>
6.2 组件传参
- 父向子传递参数 通过 属性 的方式
- 子向父传递参数 通过 触发事件 的方式
- 使用全局数据传递参数
- 通过 挂载 vue 的原型上
- 通过 globalData 的方式
1. 父向子传递参数
- 父页面向子组件 ul-com 通过属性名 list 传递了一个数组数据
- 子组件 通过 props 进行接受 数据
子组件:
<template><image :src="mysrc"></image>
</template><script>export default{//声明一下要接收的 父组件传递过来的属性props:{mysrc:String}}
</script><style>
</style>
父组件:
<template><view class="content"><!-- 4 使用组件 --><imgBorder :mysrc="src1"></imgBorder></view>
</template><script>//2.引入自定义组件import imgBorder from "@/components/img-border.vue"export default{ data(){return {src1:"/static/logo.png"}},//3.组件注册components:{imgBorder:imgBorder}}
</script><style>
</style>
2. 子向父传递参数
- 子组件通过 触发事件 的方式向父组件传递数据
- 父组件通过 监听事件 的方式来接收数据
这个有点拗
父组件:
<template><view class="content"><view>子组件传递过来的路径:{{src}}</view><!-- 4 使用组件 --><imgBorder @srcChange="handleSrcChange" :mysrc="src1"></imgBorder></view>
</template><script>//2.引入自定义组件import imgBorder from "@/components/img-border.vue"export default{ data(){return {src: "",src1:"/static/logo.png"}},//3.组件注册components:{imgBorder:imgBorder},methods:{handleSrcChange(e){console.log("父组件的自定义事件被触发了");console.log(e);this.src = e}}}
</script><style>
</style>
子组件:
<template><image @click="handleClick" :src="mysrc"></image>
</template><script>export default{//声明一下要接收的 父组件传递过来的属性props:{mysrc:String},data(){return {src: "",}},methods:{handleClick(){console.log("女孩为何喜欢穿短裙???");//子向父 传递数据 通过触发事件//$emit("自定义的事件名称","要传递的参数")this.$emit("srcChange",this.mysrc)}}}
</script><style>
</style>
3. 全局共享数据
- 通过 Vue 的原型共享数据
- 通过 globalData 共享数据
- vuex
- 本地存储
- 通过 Vue 的原型共享数据
在 main.js 中
//定义全局数据 通过 vue 的原型来实现
Vue.prototype.baseurl="www.baidu.com";
<script>//2.引入自定义组件import imgBorder from "@/components/img-border.vue"export default{ data(){return {src: "",}},//3.组件注册components:{},methods:{handleSrcChange(e){console.log("父组件的自定义事件被触发了");console.log(e);this.src = e}},onLoad() {console.log(this.baseurl);}}
</script>
- 通过 globalData 共享数据
这个是小程序独有的
在 App.vue 中
<script>export default {onLaunch: function() {console.log('App Launch')},onShow: function() {console.log('App Show')},onHide: function() {console.log('App Hide')},globalData:{base:"www.360.com"}}
</script><style>/*每个页面公共css */
</style>
onLoad() {console.log(this.baseurl);console.log(getApp().globalData.base);}
6.3 组件插槽
- 标签其实也是数据中的一种,想实现动态的给 子组件传递 标签,就可以使用插槽 slot
- 通过 slot 来实现占位符
7 生命周期
7.1 常用生命周期
- uni-app 框架的生命周期结合了 vue 和 微信小程序 的生命周期
- 全局的APP中 使用 onLaunch 表示应用启动时
- 页面中 使用 onLoad 或者 onShow 分别表示 页面加载完毕时 和页面 显示时
- 组件中使用 mounted 组件挂载完毕时
在 App.vue 中
onLaunch: function(){}
<script>export default {onLaunch: function() {console.log('App Launch 应用启动')},onShow: function() {console.log('App Show')},onHide: function() {console.log('App Hide')},globalData:{base:"www.360.com"}}
</script><style>/*每个页面公共css */
</style>
在页面中:
onLoad(),onShow()
<script>//2.引入自定义组件import imgBorder from "@/components/img-border.vue"export default{ data(){return {src: "",src1:"/static/logo.png"}},//3.组件注册components:{imgBorder:imgBorder},methods:{handleSrcChange(e){console.log("父组件的自定义事件被触发了");console.log(e);this.src = e}},onLoad() {console.log("页面加载完毕");},onShow() {console.log("页面被看到");}}
</script>
在组件中:
mounted()
<script>export default{//声明一下要接收的 父组件传递过来的属性props:{mysrc:String},data(){return {src: "",}},methods:{handleClick(){console.log("女孩为何喜欢穿短裙???");//子向父 传递数据 通过触发事件//$emit("自定义的事件名称","要传递的参数")this.$emit("srcChange",this.mysrc)}},mounted() {console.log("组件挂载完毕")}}
</script>
7.2 完整生命周期
uni-app https://uniapp.dcloud.io/frame?id=生命周期
vue https://cn.vuejs.org/v2/guide/instance.html?#生命周期图示
微信小程序 https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page-life-cycle.html
【uni-app】uni-app基础知识相关推荐
- 手机APP UI设计尺寸基础知识
从原理开始介绍一下移动端设计尺寸规范 初涉移动端设计和开发的同学们,基本都会在尺寸问题上纠结好一阵子才能摸到头绪.我也花了很长时间才弄明白,感觉有必要写一篇足够通俗易懂的教程来帮助大家.从原理说起,理 ...
- 【嵌入式Linux】嵌入式Linux应用开发基础知识之输入系统应用编程
文章目录 前言 1.输入系统应用编程 1.1.输入系统框架及调试 1.1.1.框架概述 1.1.2.编写APP需要的基础知识 1.2.调试技巧 1.2.1.查看设备信息 1.2.2.使用命令查看节点数 ...
- APP推广基础知识大全
前言: 本文主要对 APP推广方式做一个全方位的知识总结, 每一种推广方式在这里不会写得太啰嗦,主要是让大家快速了解到每一种推广方式. 一.应用商店上架 苹果商店,应用宝商店,百度手机助手,阿里应用商 ...
- 手机APP开发之MIT Appinventor详细实战教程(九),工具箱的设计和MIT的基础知识讲解
(一)APP功能介绍 这次我给大家介绍一个关于工具箱的App ,这个APP在逻辑方面较为简单.但是他的设计过程中包含了很多相关的知识,通过这篇文章,可以让大家很具体有直观的了解到这个编程软件的使用方法 ...
- 鸿蒙APP开发基础知识
鸿蒙开发基础知识目录 DevEco Studio编辑器de使用 创建新项目 打开一个项目 新建一个文件夹 新建一个布局文件 新建一个Page Ability(Feature Ability) 配置Ab ...
- Android 基础知识+app测试权限问题
Android 基础知识(权限篇)** 前言 Android是一个开源的,基于Linux的移动设备操作系统,主要用于移动设备,如智能手机和平板电脑.Android是由谷歌及其他公司带领的开放手机联 ...
- 直播app开发基础知识汇总
很多想进行直播app开发的朋友,可能并不太了解音视频软件开发基础知识,以下这篇文章来源网络,都是一些基础概念,转载与大家分享. 当然,这只是一篇基础知识文档,如果有需要更深度了解直播app开发知识的朋 ...
- 网络视频直播系统开发第一课,开发直播APP软件一定要懂的基础知识
"网络视频直播系统怎么开发.有什么难点"这类文章实在是太难写了,因为开发直播APP软件需要至少全国用户能够跨平台流畅观看,这其中涉及到的点太多太复杂了,所以讲清楚网络视频直播系统怎 ...
- 你的app是由旧版打造_「软件测试基础知识」Web APP和原生 APP的不同
原生APP访问和兼容的能力也比较好,可以支持在线或者离线消息推送或是进行本地资源访问,以及摄像.拨号.蓝牙.功能的调取.原生APP开发有许多的优势,如原生APP是针对不同的平台为用户提供不同的体验.节 ...
- android进阶3step2:Android App通信 ——端口号IP等网络基础知识扫盲
网络操作基础知识 一.IP 地址和端口号 1) IP 地址用于在网络中唯一标识一台机器(通信实体),是一个 32 位整数,通常 用 4 个 0-255 的十进制数标识; 2) 端口号用于唯一标识通信实 ...
最新文章
- 华为鸿蒙vivo,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙
- 薛定谔的猫跳进了生物学界,化学家表示:没有我可能办不到
- 聊聊 MySql 索引那些事儿
- 010 数据结构逆向—链表
- ITK:相同类型的多个输入
- 阿里云多个智物新品集体出道,持续加速产业智能化
- 使用CUBA进行开发–是Spring的重大转变吗?
- pandas拉长dataframe
- DOS 常用命令大全
- 清掉数据_学习之大数据项目笔记第七篇【数仓模块-日志预处理篇】
- 从Myeclipe转向Idea,各种遇坑与填坑经验,持续更新(图文)
- Linux之动态网页——搭建博客
- 计算机的原码, 反码和补码
- 如何分辨usb压枪芯片是无后座压枪还是键鼠模拟压枪
- 2015.11-12 maxon电机接线——调试——控制
- 《吴恩达深度学习》学习笔记011_深度卷积网络:实例探究(Deep convolutional models: case studies)
- python爬取微信公众号图片并生成word文档
- 用html制作的旅游相册名字唯美,好听的相册名字
- 20162328WJH实验五网络编程与安全实验报告
- 贵州最新特种工(施工升降机)模拟题集及答案
热门文章
- vue中使用 minix 混入
- ionic 构建 Cannot load gulp tasks: Error: Error in module: .\gulpfile.js:
- L1-009 N个数求和 (20分)【附测试】
- 你依然是我心中最美丽的彩虹
- STM32超低功耗入门之认识超低功耗
- Chrome浏览器常用快捷键总结
- Spring 全家桶,永远滴神
- Vue全家桶基础设施环境搭建
- 成人python线上培训机构_哪些成年人正通过在线教育平台学习?看这个大数据报告就知道...
- 余世雄 - 与上司沟通的7个技巧