[TOC]
[TOC]
# 第一个uni-app项目
这部分的项目文件为:
* [ ] 01-UniAPP Hello World
* [ ] 02-UniAPP Tabs
# 目录结构
一个uni-app工程,默认包含如下目录及文件:
![](https://box.kancloud.cn/b86b6a07559e522d7933c94c10c6c9cc_345x388.png)
图 uni-app工程文件目录及说明
* components目录:组件文件存放目录
* pages目录:业务页面文件存放目录
* static目录:存放应用引用静态资源(如图片、视频等)的地方,注意:静态资源只能存放于此
* unpackage:编译的临时文件目录
* App.vue:应用配置,用来配置App全局样式以及监听应用的生命周期
* main.js:Vue初始化入口文件
* manifest.json:配置应用名称、appid、logo、版本等打包信息
* pages.json:配置页面路由、导航条、选项卡等页面类信息
# 页面文件规范
为了实现微信小程序、原生App的跨端兼容,综合考虑编译速度、运行性能等因素,uni-app
约定了如下开发规范:
> 页面规范 - [Vue 单文件组件 (SFC) 规范
> ](http://doc.vue-js.com/v2/guide/single-file-components.html)
.vue 文件是一个自定义的文件类型,用类 HTML 语法描述一个 Vue 组件。每个 .vue
文件包含三种类型的顶级语言块`<template>`、`<script>` 和`<style>`。
```html
<template>
</template>
<script>
</script>
<style>
</style>
```
* `template`语言块用于编写页面的定义代码
* script语言块编写页面的模块Javascript代码
* style语言块用于编写样式定义脚本
# 什么是组件
> 组件是视图层的基本组成单元
一个组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之内。
```html
<template>
<view>
<tagname property="value">
content
</tagname>
</view>
</template>
```
**Tips**
* 所有组件与属性名都是小写,单词之间以连字符-连接。
* 根节点为`<template>`,这个`<template>`下只能有一个根组件,即`<template>`元素的孩子节点构成一颗树,树只有一个根节点。
## 相关文档
> 框架为开发者提供了一系列基础组件,开发者可以通过组合这些基础组件进行快速开发。
> [uni-app组件使用规范](http://uniapp.dcloud.io/component/README)
## 配置文件
### 配置文件概述
pages.json 文件用来对 uni-app
进行全局配置(globalStyle)、决定页面文件的路径和窗口表现(pages)、设置底部 tab
的表现(tabBar)和条件启动(condition)。
图表 4‑4 配置文件pages.json 的配置项列表
| 选项 | 说明 |
| --- | --- |
| globalStyle | 设置默认页面的窗口表现 |
| pages | 设置页面路径及窗口表现,pages数组中第一项表示应用启动页,项目中出现的所有的页面必须在pages中列出 |
| tabBar | 设置底部 tab 的表现 |
| condition | 启动模式配置,仅开发阶段有效,方便给页面传递参数测试功能 |
* 完整的配置说明,参考配置文件一章。
### 全局配置
配置文件的globalStyle节用于设置整个APP的全局设置,如顶部当航栏的文字颜色、标背景色以及整个页面的背景色。
```html
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#FF0000",
"backgroundColor": "#F8F8F8"
},
```
这些配置如果某个页面想改变默认值,需要在特定页面的配置中重载,例如将pages/index/index页面的导航栏的背景色(navigationBarBackgroundColor)改成绿色(#00FF00),需要修改style属性的值。
```html
{
"pages": [ //pages数组中第一项表示应用启动页
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationBarBackgroundColor": "#00FF00"
}
},
…
```
### 模式配置
假设已经增加了3个页面
* pages/home/index
* pages/home/hello
* pages/home/about
根据约定pages数组中第一项表示应用启动页
```html
"pages": [{
"path": "pages/home/index",
"style": {
"navigationBarTitleText": "首页",
"navigationBarBackgroundColor": "#00FF00"
}
},
{
"path": "pages/home/hello",
"style": {
"navigationBarTitleText": "Hello!"
}
},
{
"path": "pages/home/about",
//重载全局设置
"style": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "About",
"navigationBarBackgroundColor": "#F00",
"backgroundColor": "#F8F8F8"
}
}
],
```
那么,在开发阶段,如果要直接启动about页面,就必须将about设置为第一项,这样改动起来非常麻烦,因此可以通过配置编译模式赖解决,condition节的list数组存放多个配置的列表,索引从0开始,current属性用于设置当前启用的模式。
```html
"condition": { //模式配置,仅开发期间生效
"current": 2, //当前激活的模式(list 的索引项,从0开始)
"list": [{
"name": "首页", //模式名称
"path": "pages/home/index", //启动页面,必选
"query": "" //启动参数,在页面的onLoad函数里面得到。
},
{
"name": "Hello", //模式名称
"path": "pages/home/hello", //启动页面,必选
"query": "" //启动参数,在页面的onLoad函数里面得到。
},
{
"name": "关于", //模式名称
"path": "pages/home/about", //启动页面,必选
"query": "uid=100&t=1535987051" //启动参数,在页面的onLoad函数里面得到。
}
]
}
```
如果页面有参数,可以在onLoad事件中解析。
```html
onLoad: function (e) {
console.log(JSON.stringify(e));
}
```
打印的结果如下:
```html
{"uid":"100","t":"1535987051"}
```
> 查询字符串:问号后面所跟的参数“uid=100&t=1535987051”就是查询字符串,字符串以键值对的形式出现,如果有多个参数,用"&"隔开就行了。
> 例如:"about?uid=100&t=1535987051"表示带两个参数uid和t,他们的值分别为100和1535987051。参数的名称和值含有特殊字符必须进行url转义。
**注意:** 在5+app里真机运行可直接打开配置的页面,微信开发者工具里需要手动改变编译模式,如下图:
![](https://box.kancloud.cn/3bb0237feddec9da38de5325190bf807_862x793.png)
- 内容介绍
- EcmaScript基础
- 快速入门
- 常量与变量
- 字符串
- 函数的基本概念
- 条件判断
- 数组
- 循环
- while循环
- for循环
- 函数基础
- 对象
- 对象的方法
- 函数
- 变量作用域
- 箭头函数
- 闭包
- 高阶函数
- map/reduce
- filter
- sort
- Promise
- 基本对象
- Arguments 对象
- 剩余参数
- Map和Set
- Json基础
- RegExp
- Date
- async
- callback
- promise基础
- promise-api
- promise链
- async-await
- 项目实践
- 标签系统
- 远程API请求
- 面向对象编程
- 创建对象
- 原型继承
- 项目实践
- Classes
- 构造函数
- extends
- static
- 项目实践
- 模块
- import
- export
- 项目实践
- 第三方扩展库
- immutable
- Vue快速入门
- 理解MVVM
- Vue中的MVVM模型
- Webpack+Vue快速入门
- 模板语法
- 计算属性和侦听器
- Class 与 Style 绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
- 组件注册
- Prop
- 自定义事件
- 插槽
- 混入
- 过滤器
- 项目实践
- 标签编辑
- 移动客户端开发
- uni-app基础
- 快速入门程序
- 单页程序
- 底部Tab导航
- Vue语法基础
- 模版语法
- 计算属性与侦听器
- Class与Style绑定
- 样式与布局
- Box模型
- Flex布局
- 内置指令
- 基本指令
- v-model与表单
- 条件渲染指令
- 列表渲染指令v-for
- 事件与自定义属性
- 生命周期
- 项目实践
- 学生实验
- 贝店商品列表
- 加载更多数据
- 详情页面
- 自定义组件
- 内置组件
- 表单组件
- 技术专题
- 状态管理vuex
- Flyio
- Mockjs
- SCSS
- 条件编译
- 常用功能实现
- 上拉加载更多数据
- 数据加载综合案例
- Teaset UI组件库
- Teaset设计
- Teaset使用基础
- ts-tag
- ts-badge
- ts-button
- ta-banner
- ts-list
- ts-icon
- ts-load-more
- ts-segmented-control
- 代码模版
- 项目实践
- 标签组件
- 失物招领客户端原型
- 发布页面
- 检索页面
- 详情页面
- 服务端开发技术
- 服务端开发环境配置
- Koajs快速入门
- 快速入门
- 常用Koa中间件介绍
- 文件上传
- RestfulApi
- 一个复杂的RESTful例子
- 使用Mockjs生成模拟数据
- Thinkjs快速入门
- MVC模式
- Thinkjs介绍
- 快速入门
- RESTful服务
- RBAC案例
- 关联模型
- 应用开发框架
- 服务端开发
- PC端管理界面开发
- 移动端开发
- 项目实践
- 失物招领项目
- 移动客户端UI设计
- 服务端设计
- 数据库设计
- Event(事件)
- 客户端设计
- 事件列表页面
- 发布页面
- 事件详情页面
- API设计
- image
- event
- 微信公众号开发
- ui设计规范