• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

微信小程序开发

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最最重要的还是得从阅读开发文档入手

1. 目录结构

  • 微信小程序文件结构
wxml[结构] + wxss[样式] + js[逻辑] + json[配置]
2. 全局配置
  • 全局配置 -- 根目录下的app.json
    • 对微信小程序做全局配置
    • 决定页面文件的路径、窗口表现、设置网络超时等
  • 页面配置
    • 每一个小程序页面也可以使用 .json 文件来对本页面的窗口表现进行配置。
    • 页面中配置项在当前页面会覆盖 app.json 的 window 中相同的配置项。
3. 小程序框架
  • 001 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面
  • 002 注册小程序
    • 在 app.js 中调用 App()注册小程序实例
    • 绑定生命周期回调函数、错误监听和页面不存在监听函数等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// app.js
App({
    onLaunch (options) {
      // Do something initial when launch.
  },
  onShow (options) {
      // Do something when show.
  },
  onHide () {
      // Do something when hide.
  },
  onError (msg) {
      console.log(msg)
  },
  globalData: \'I am global data\',
// globalData: {
//     data1: \'data1Value\'
// }
})
    • 整个小程序只有一个 App 实例,是全部页面共享的。
    • 开发者可以通过 getApp 方法获取到全局唯一的 App 实例,获取App上的数据或调用开发者注册在 App 上的函数。
1
2
const appInstance = getApp()
console.log(appInstance.globalData) // I am global data
  • 003 注册页面
    • 小程序页面在对应的 js 文件中使用Page()进行注册
    • 指定页面的初始数据、生命周期回调、事件处理函数等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // 页面创建时执行
  },
  onShow: function() {
    // 页面出现在前台时执行
  },
  onReady: function() {
    // 页面首次渲染完毕时执行
  },
  onHide: function() {
    // 页面从前台变为后台时执行
  },
  onUnload: function() {
    // 页面销毁时执行
  },
  onPullDownRefresh: function() {
    // 触发下拉刷新时执行
  },
  onReachBottom: function() {
    // 页面触底时执行
  },
  onShareAppMessage: function () {
    // 页面被用户分享时执行
  },
  onPageScroll: function() {
    // 页面滚动时执行
  },
  onResize: function() {
    // 页面尺寸变化时执行
  },
  onTabItemTap(item) {
    // tab 点击时执行
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  // 事件响应函数
  viewTap: function() {
    this.setData({
      text: \'Set some data for updating view.\'
    }, function() {
      // this is setData callback
    })
  },
  // 自由数据
  customData: {
    hi: \'MINA\'
  }
})
  • 004 使用Component构造器构造页面
    • Component 构造器的主要区别是:方法需要放在 methods: { } 里面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Component({
  data: {
    text: "This is page data."
  },
  methods: {
    onLoad: function(options) {
      // 页面创建时执行
    },
    onPullDownRefresh: function() {
      // 下拉刷新时执行
    },
    // 事件响应函数
    viewTap: function() {
      // ...
    }
  }
})
    • 可以使用 behaviors 来提取所有页面中公用的代码段
1
2
3
4
5
6
7
8
9
10
11
// page-common-behavior.js
module.exports = Behavior({
  attached: function() {
    // 页面创建时执行
    console.info(\'Page loaded!\')
  },
  detached: function() {
    // 页面销毁时执行
    console.info(\'Page unloaded!\')
  }
})

 

1
2
3
4
5
6
7
// 页面 A
var pageCommonBehavior = require(\'./page-common-behavior\')
Component({
  behaviors: [pageCommonBehavior],
  data: { /* ... */ },
  methods: { /* ... */ },
})

  

1
2
3
4
5
6
7
// 页面 B
var pageCommonBehavior = require(\'./page-common-behavior\')
Component({
  behaviors: [pageCommonBehavior],
  data: { /* ... */ },
  methods: { /* ... */ },
})
  • 005 自定义组件
    • 类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成
    • 0051 首先需要在 json文件中进行自定义组件声明
      • (将 component 字段设为 true 可将这一组文件设为自定义组件)
1
2
3
4
// .json
{
  "component"true
}
    • 0052在 wxml 文件中编写组件模板,在 wxss 文件中加入组件样式
1
2
3
4
5
6
7
8
9
10
11
12
<!-- 这是自定义组件的内部WXML结构 -->
<view class="inner">
  {{innerText}}
</view>
<slot></slot>
/*
 * 这里的样式只应用于这个自定义组件
 * 注意:在组件wxss中不应使用ID选择器、属性选择器和标签名选择器。
 */
.inner {
  color: red;
}
    • 0053 在自定义组件的 js 文件中,需要使用 Component() 来注册组件,并提供组件的属性定义、内部数据和自定义方法。
      • (组件的属性值和内部数据将被用于组件 wxml 的渲染,其中,属性值是可由组件外部传入的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// .js
Component({
  properties: {
    // 这里定义了innerText属性,属性值可以在组件使用时指定
    innerText: {
      type: String,
      value: \'default value\',
    }
  },
  data: {
    // 这里是一些组件内部数据
    someData: {}
  },
  methods: {
    // 这里是一个自定义方法
    customMethod: function(){}
  }
})
    • 0054 使用自定义组件
      • 00541 在页面的 json 文件中进行引用声明
1
2
3
4
5
{
  "usingComponents": {
    "component-tag-name""path/to/the/custom/component"
  }
}
      • 00542 在页面的 wxml 中就可以像使用基础组件一样使用自定义组件
        • 节点名即自定义组件的标签名,节点属性即传递给组件的属性值
1
2
3
4
5
<view>
  <!-- 以下是对一个自定义组件的引用 -->
  <component-tag-name inner-text="Some text">
</component-tag-name>
</view>
    • 注意
      • 因为 WXML 节点标签名只能是小写字母、中划线和下划线的组合,所以自定义组件的标签名也只能包含这些字符。
      • 自定义组件也是可以引用自定义组件的,引用方法类似于页面引用自定义组件的方式(使用 usingComponents 字段)。
      • 自定义组件和页面所在项目根目录名不能以“wx-”为前缀,否则会报错。
  • 4 页面路由 ---  在小程序中所有页面的路由全部由框架进行管理, 框架以栈的形式维护了当前的所有页面
    • 注意点
      • navigateTo, redirectTo 只能打开非 tabBar 页面。
      • switchTab 只能打开 tabBar 页面。
      • reLaunch 可以打开任意页面。
      • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
      • 调用页面路由带的参数可以在目标页面的onLoad中获取
  • 5 模块化
    • 001将公共代码抽离到js文件,通过module.exports暴露接口
1
2
3
4
5
6
7
8
9
10
11
12
// common.js
function sayHello(name) {
  console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
  console.log(`Goodbye ${name} !`)
}
  
module.exports= {
sayHello: sayHello
sayGoodbye: sayGoodbye
}
    • 002 在需要使用这些模块的文件中,使用 require 将公共代码引入
1
2
3
4
5
6
7
8
9
var common = require(\'common.js\')
Page({
  helloMINA: function() {
    common.sayHello(\'MINA\')
  },
  goodbyeMINA: function() {
    common.sayGoodbye(\'MINA\')
  }
})
  • tip
  1. 绑定事件
    • bindtap
    • catchtap -- 不冒泡
    • 如果一个view有多个bindtap,只走最后一个
    • 如果一个view同时有bindtap和catchtap,只走catchtap
  2. 全局方法 --> 写在utils>request.js
    • 在根目录下的app.js 的func对象中声明
    • 在页面中,通过getApp().func.xxx 调用
  3. 双向绑定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<view class="list">
<text class="list_left">身份证号:</text>
    <input name="cardId" class="list_right" value="{{infodata.idCard}}" data-type="idCard" bindinput="inputChange"/>
</view>
inputChange(e){
    var content = e.detail.value
    var type = e.currentTarget.dataset.type
    switch (type) {
      case "idCard":
        this.setData({
          ["infodata.idCard"]: content
        })
        break;
      case "userName":
        this.setData({
          ["infodata.username"]: content
        })
        break;
    }
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
    热门话题
    阅读排行榜

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap