开启左侧

5 分钟详细了解支付宝小程序文件结构

[复制链接]
在线会员 扬花落满肩 发表于 2023-2-15 09:21:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
稿件滥觞:阿里云开辟者社区


全部设置


app.json
app.json 是女伶 href="https://www.taojin168.com/cloud/" target="_blank">小法式的全部设置,用于设置小法式的页里列表、默认窗心题目、导航栏违风景等。
  1. {
  2. "pages": [
  3. "pages/todos/todos",
  4. "pages/add-todo/add-todo"
  5. ],
  6. "window": {
  7.   "defaultTitle": "Todo App",
  8. "titleBarColor": "#323239"
  9. }
  10. }
复造代码
app.acss 界说了全部款式,感化于目前小法式的统统页里。
  1. page {
  2. flex: 1;
  3. display: flex;
  4. background: #323239;
  5. font-family: "pingFang SC" "pingFang";
  6. }
复造代码
上例中的 page 为框架撑持的特别挑选器,会匹配框架供给的页里根节面容器。
app.js
app.js 用于备案小法式使用,可设置小法式的性命周期,申明全部数据,挪用丰硕的 API,如如下获得用户受权及获得用户疑息 API 等。
  1. App({
  2. // 申明全部数据
  3. todos[
  4. { text: 'Learning Javascript', completed: true },
  5. { text: 'Learning ES2016', completed: true },
  6. { text: 'Learning领取 宝小法式', completed: false },
  7. ],
  8. userInfo: null,
  9. // 申明全部办法
  10. getUserInfo() {
  11. return new Promise((resolve, reject) => {
  12. if (this.userInfo) resolve(this.userInfo);
  13. // 挪用用户受权 API
  14. my.getAuthCode({
  15. scopes: ['auth_user'],
  16. success: authcode => {
  17. console.info(authcode);
  18. // 挪用获得用户疑息 API
  19. my.getAuthUserInfo({
  20. success: res => {
  21. this.userInfo = res;
  22.   resolve(this.userInfo);
  23. },
  24. fail: () => {
  25. reject({});
  26. },
  27. });
  28. },
  29. fail: () => {
  30. reject({});
  31. },
  32. });
  33. });
  34. },
  35. });
复造代码
能够瞅到,全部的逻辑代码搁正在 App({})中,申明了全部数据 todos 、 userInfo ,和全部办法 getUserInfo()。
todos 全部数据中已经保存了一点儿数据,即 Todo App 小法式中已经有的一点儿待处事项。
全部办法 getUserInfo() 挪用了受权 API my.getAuthCode,和获得用户疑息 API my.getAuthUserInfo ,并将获得到的用户疑息保存正在 userInfo 中。
小法式页里

此示例中有二个页里,Todo List 页里战 Add Todo 页里,皆位于 pages 目次下。小法式的统统页里路子必需正在 app.json 中申明,路子从名目根目次开端且不克不及包罗后缀名,pages 的第一个页里即是小法式的尾页。
每个页里 由共路子下的四品种型文献构成,即 .json 后缀的设置文献,.axml 后缀的模版文献,.acss 后缀的款式文献,.js 后缀的逻辑剧本文献。
todo List 页里
todos.json
todos.json 用于设置目前页里的窗心表示。此处界说了使用一个自界说组件 add-button ,指定它的组件称呼及对于应的路子。自界说组件的具体使用前面会报告。
  1. {
  2. "usingComponents": {
  3. "add-button": "/components/add-button/add-button"
  4. }
  5. }
复造代码
页里设置文献没有是必需的。当存留页里设置文献时,各个页里设置项会劣先于 app.json 中 window 的共名设置项。当没有存留页里设置文献,则间接使用 app.json 中的默认设置。因而,Todo List 页里的题目为 app.json 中指定的 defaultTitle ,即 Todo App。
todos.axml
todos.axml 为页里构造模版文献:
  1. <view class="page-todos">
  2. <view class="user">
  3. <image class="avatar" src="{{user.avatar || '../../assets/logo.png'}}" background-size="cover"></image>
  4. <view class="nickname">{{user.nickName && user.nickName + '\'s' || 'My'}} Todo List</view>
  5. </view>
  6. <view class="todo-items">
  7. <checkbox-group class="todo-items-group" onChange="onTodoChanged">
  8. <label a:for="{{todos}}" a:for-item="item" class="todo-item {{item.completed ? 'checked' : ''}}" a:key="*this">
  9. <checkbox class="todo-item-checkbox" value="{{item.text}}" checked="{{item.completed}}" />
  10. <text class="todo-item-text">{{item.text}}</text>
  11. </label>
  12. </checkbox-group>
  13. </view>
  14. <view class="todo-footer">
  15. <add-button text="Add Todo" onClickMe="addTodo" ></add-button>
  16. </view>
  17. </view>
复造代码
使用 <view/>,<image/>,<text/>,<button/>,<label/>,<checkbox/>,
去拆修页里构造和颠末 Mustache 语法二对于年夜括号({{}})绑定 todos 数据。
todos.js
todos.js 是页里的逻辑剧本文献,小法式页里的逻辑代码必须包罗正在 Page({}) 中。
  1. // 获得全部 app 真例
  2. const app = getApp();
  3. Page({
  4. // 申明页里数据
  5. data: {}
  6. // 监听性命周期回调 onLoad
  7. onLoad() {
  8. // 获得用户疑息并保存数据
  9. app.getUserInfo().then(
  10. user => this.setData({
  11. user,
  12. }),
  13. );
  14. },
  15. // 监听性命周期回调 onShow
  16. onShow() {
  17. // 树立全部数据到目前页里数据
  18. this.setData({ todos: app.todos });
  19. },
  20. // 工作处置函数
  21. onTodoChanged(e) {
  22. // 改正全部数据
  23. const checkedTodos = e.detail.value;
  24. app.setTodos(app.todos.map(todo => ({
  25. ...todo,
  26. completed: checkedTodos.indexOf(todo.text) > -1,
  27. })));
  28. this.setData({ todos: app.todos });
  29. },
  30. addTodo() {
  31. //中止 页里跳转
  32. my.navigateTo({ url: '../add-todo/add-todo' });
  33. },
  34. });
复造代码
正在那个文献中可完毕:
· 监听并处置页里的性命周期函数 onShow onLoad
· 获得小法式真例和其余页里真例 getApp getCurrentPages
· 申明并处置数据 data
·照应 页里接互工作,挪用 API 等
· 那里需要留神的是 app.todos 是去自 app.js 中全部的变质界说
todos.acss
todos.acss 界说页脸部分款式。指定 todos.axml 中差别元艳的款式,包罗职位、布景色彩、字体、字体色彩等。 ACSS 语法拜见款式文档。页里的 .acss 文献没有是必需的,但是关于差异挑选器,页脸部分款式会笼盖 app.acss 全部款式。
  1. .page-todos {
  2. display: flex;
  3. flex-direction: column;
  4. width: 100%;
  5. max-height: 100vh;
  6. }
  7. .user {
  8. display: flex;
  9. flex-shrink: 0;
  10. padding: 30px;
  11. color: #FFF;
  12. flex-direction: column;
  13. align-items: center;
  14. }
  15. .avatar {
  16. width: 130rpx;
  17. height: 130rpx;
  18. border-radius: 50%;
  19. background-color: #FFF;
  20. align-self: center;
  21. }
  22. .nickname {
  23. padding-top: 40rpx;
  24. text-align: center;
  25. font-size: 40rpx;
  26. font-weight: 100;
  27. }
  28. .todo-items {
  29. flex-grow: 1;
  30. font-size: 34rpx;
  31. padding: 50rpx 120rpx;
  32. color: #0EFFD6;
  33. overflow: auto;
  34. }
  35. .todo-items-group {
  36. display: flex;
  37. flex-direction: column;
  38. }
  39. .todo-item {
  40. position: relative;
  41. margin-bottom: 50rpx;
  42. padding-left:80rpx;
  43. line-height: 70rpx;
  44. height: 80rpx;
  45. box-sizing: border-box;
  46. border: 2px solid rgb(14, 255, 214);
  47. border-radius: 100rpx;
  48. overflow: hidden;
  49. text-overflow: ellipsis;
  50. /* white-space:nowrap; */
  51. transition: border 0.2s;
  52. }
  53. .todo-item:last-child {
  54. margin-bottom: 0;
  55. }
  56. .todo-item::before {
  57. content: '';
  58. position: absolute;
  59. left: 12rpx;
  60. margin-right: 20rpx;
  61. width: 45rpx;
  62. height: 45rpx;
  63. background-color: rgba(14, 222, 255, 0.3);
  64. border-radius: 50%;
  65. top: 50%;
  66. transform: translateY(-50%);
  67. transition: background-color 0.2s;
  68. }
  69. .todo-item::after {
  70. content: '';
  71. position: absolute;
  72. left: 29rpx;
  73. width: 8rpx;
  74. height: 18rpx;
  75. top: 50%;
  76. transform: translateY(-60%) rotate(38deg);
  77. border: 4rpx solid #FFF;
  78. border-width: 0 4rpx 4rpx 0;
  79. opacity: 0;
  80. transition: opacity 0.2s;
  81. }
  82. .todo-item-checkbox {
  83. display: none;
  84. }
  85. .checked .todo-item-text {
  86. text-decoration: line-through;
  87. color: #1AA0B8;
  88. }
  89. .checked.todo-item {
  90. border: 2px solid rgba(14, 222, 255, 0.2);
  91. }
  92. .checked.todo-item::before {
  93. background-color: rgba(14, 222, 255, 0.2);
  94. }
  95. .checked.todo-item::after {
  96. opacity: 1;
  97. }
  98. .todo-footer {
  99. flex-shrink: 0;
  100. padding: 50rpx 0 100rpx;
  101. font-size: 48rpx;
  102. font-weight: 200;
  103. text-align: center;
  104. }
复造代码
Add Todo 页里
add-todo.json 申明自界说组件称呼战路子:
add-todo.json
  1. {
  2. "usingComponents": {
  3. "add-button": "/components/add-button/add-button"
  4. }
  5. }
复造代码
add-todo.axml
add-todo.axml 为页里构造模版文献:
  1. <view class="page-add-todo">
  2. <view class="add-todo">
  3. <input
  4. class="add-todo-input"
  5. placeholder="What needs to be done?"
  6. onBlur="onBlur"
  7. value="{{inputValue}}"
  8. />
  9. </view>
  10. <view class="todo-footer">
  11. <add-button text="Add Todo" onClickMe="add" ></add-button>
  12. </view>
  13. </view>
复造代码
此页里的二个中心功用为:
1. 使用<input/>组件领受用户输出。
2. <add-button>是一个自界说组件,可将一点儿功用残破的代码启拆为自界说组件,就于正在其余处所复用。
add-todo.js
add-todo.js 页里逻辑代码:
  1. const app = getApp();
  2. Page({
  3. data: {
  4. inputValue: '',
  5. },
  6. onBlur(e) {
  7. this.setData({
  8. inputValue: e.detail.value,
  9. });
  10. },
  11. add() {
  12. app.todos = app.todos.concat([
  13. {
  14. text: this.data.inputValue,
  15.   compeleted: false,
  16. },
  17. ]);
  18. my.navigateBack();
  19. },
  20. });
复造代码
add-todo.acss
add-todo.acss 共 todos.acss 用法不合,再也不赘述。
稿件滥觞:阿里云开辟者社区
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )