目录

  • 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 开发方式

  1. 使用 DCloud 公司提供的 HBuilderX 来快速开发
  2. 使用脚手架来快速搭建和开发

1.2 脚手架搭建项目

(这些命令都是可以执行的)

  1. 全局安装
npm install -g @vue/cli
  1. 创建项目
vue create -p dcloudio/uni-preset-vue my-project
  1. 启动项目
npm run dev:mp-weixin
  1. 微信小程序开发者工具导入项目
    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
  • 本地存储
  1. 通过 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>
  1. 通过 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基础知识相关推荐

  1. 手机APP UI设计尺寸基础知识

    从原理开始介绍一下移动端设计尺寸规范 初涉移动端设计和开发的同学们,基本都会在尺寸问题上纠结好一阵子才能摸到头绪.我也花了很长时间才弄明白,感觉有必要写一篇足够通俗易懂的教程来帮助大家.从原理说起,理 ...

  2. 【嵌入式Linux】嵌入式Linux应用开发基础知识之输入系统应用编程

    文章目录 前言 1.输入系统应用编程 1.1.输入系统框架及调试 1.1.1.框架概述 1.1.2.编写APP需要的基础知识 1.2.调试技巧 1.2.1.查看设备信息 1.2.2.使用命令查看节点数 ...

  3. APP推广基础知识大全

    前言: 本文主要对 APP推广方式做一个全方位的知识总结, 每一种推广方式在这里不会写得太啰嗦,主要是让大家快速了解到每一种推广方式. 一.应用商店上架 苹果商店,应用宝商店,百度手机助手,阿里应用商 ...

  4. 手机APP开发之MIT Appinventor详细实战教程(九),工具箱的设计和MIT的基础知识讲解

    (一)APP功能介绍 这次我给大家介绍一个关于工具箱的App ,这个APP在逻辑方面较为简单.但是他的设计过程中包含了很多相关的知识,通过这篇文章,可以让大家很具体有直观的了解到这个编程软件的使用方法 ...

  5. 鸿蒙APP开发基础知识

    鸿蒙开发基础知识目录 DevEco Studio编辑器de使用 创建新项目 打开一个项目 新建一个文件夹 新建一个布局文件 新建一个Page Ability(Feature Ability) 配置Ab ...

  6. Android 基础知识+app测试权限问题

    Android 基础知识(权限篇)** 前言 ​ Android是一个开源的,基于Linux的移动设备操作系统,主要用于移动设备,如智能手机和平板电脑.Android是由谷歌及其他公司带领的开放手机联 ...

  7. 直播app开发基础知识汇总

    很多想进行直播app开发的朋友,可能并不太了解音视频软件开发基础知识,以下这篇文章来源网络,都是一些基础概念,转载与大家分享. 当然,这只是一篇基础知识文档,如果有需要更深度了解直播app开发知识的朋 ...

  8. 网络视频直播系统开发第一课,开发直播APP软件一定要懂的基础知识

    "网络视频直播系统怎么开发.有什么难点"这类文章实在是太难写了,因为开发直播APP软件需要至少全国用户能够跨平台流畅观看,这其中涉及到的点太多太复杂了,所以讲清楚网络视频直播系统怎 ...

  9. 你的app是由旧版打造_「软件测试基础知识」Web APP和原生 APP的不同

    原生APP访问和兼容的能力也比较好,可以支持在线或者离线消息推送或是进行本地资源访问,以及摄像.拨号.蓝牙.功能的调取.原生APP开发有许多的优势,如原生APP是针对不同的平台为用户提供不同的体验.节 ...

  10. android进阶3step2:Android App通信 ——端口号IP等网络基础知识扫盲

    网络操作基础知识 一.IP 地址和端口号 1) IP 地址用于在网络中唯一标识一台机器(通信实体),是一个 32 位整数,通常 用 4 个 0-255 的十进制数标识; 2) 端口号用于唯一标识通信实 ...

最新文章

  1. 华为鸿蒙vivo,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙
  2. 薛定谔的猫跳进了生物学界,化学家表示:没有我可能办不到
  3. 聊聊 MySql 索引那些事儿
  4. 010 数据结构逆向—链表
  5. ITK:相同类型的多个输入
  6. 阿里云多个智物新品集体出道,持续加速产业智能化
  7. 使用CUBA进行开发–是Spring的重大转变吗?
  8. pandas拉长dataframe
  9. DOS 常用命令大全
  10. 清掉数据_学习之大数据项目笔记第七篇【数仓模块-日志预处理篇】
  11. 从Myeclipe转向Idea,各种遇坑与填坑经验,持续更新(图文)
  12. Linux之动态网页——搭建博客
  13. 计算机的原码, 反码和补码
  14. 如何分辨usb压枪芯片是无后座压枪还是键鼠模拟压枪
  15. 2015.11-12 maxon电机接线——调试——控制
  16. 《吴恩达深度学习》学习笔记011_深度卷积网络:实例探究(Deep convolutional models: case studies)
  17. python爬取微信公众号图片并生成word文档
  18. 用html制作的旅游相册名字唯美,好听的相册名字
  19. 20162328WJH实验五网络编程与安全实验报告
  20. 贵州最新特种工(施工升降机)模拟题集及答案

热门文章

  1. vue中使用 minix 混入
  2. ionic 构建 Cannot load gulp tasks: Error: Error in module: .\gulpfile.js:
  3. L1-009 N个数求和 (20分)【附测试】
  4. 你依然是我心中最美丽的彩虹
  5. STM32超低功耗入门之认识超低功耗
  6. Chrome浏览器常用快捷键总结
  7. Spring 全家桶,永远滴神
  8. Vue全家桶基础设施环境搭建
  9. 成人python线上培训机构_哪些成年人正通过在线教育平台学习?看这个大数据报告就知道...
  10. 余世雄 - 与上司沟通的7个技巧