wx小程序初体验

小程序最近太火,不过相比较刚发布时,已经有点热度散去的感觉,不过这不影响我们对小程序的热情,开发之前建议通读下官网文档,附链接:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=201716

接下来,我们要实现的小程序效果如下,源码地址:https://github.com/caiya/weapp-ywgo

1、注册

打开微信公众平台,单击“小程序”,按步骤开始注册即可,附地址:https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN

这里要注意的就是,小程序目前个人开发者无法单独注册,需要进行企业等资格认证,不过认证那里我们随意填写,认证通不通过并不影响我们开发,只是不能正式发布而已。

2、初始化项目

注册成功后,进入后台,有个appid、密钥,这两个添加到这里,最后点击确定即可:

3、项目结构

来看下wx自动生成的项目结构:

其中,pages用来放小程序中的各个页面,这些页面必须在app.json文件的pages参数中进行配置,static是我们自定义的用来存放静态文件的目录,比如一些image、style等,utils是工具文件夹,放置一些公共类方法,比如request请求封装、时间处理等,下面来主要介绍一下几个文件:

  • app.js or page.js:app.js是全局的小程序类,page.js是各个页面层级的类,app.js的代码格式如下:
//app.js

const utils = require(‘./utils/util.js‘)

App({
  onLaunch: function () {

  },
  getUserInfo(cb) {
    var that = this
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo)
    }else{
      //调用登录接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo
              typeof cb == "function" && cb(that.globalData.userInfo)
            }
          })
        }
      })
    }
  },
  getNewsInfo(typeId) {
    var that = this;
    return new utils.Promise((resolve, reject) => {
      if (that.globalData.newsInfo && that.globalData.newsInfo["" + typeId]) {
        resolve(that.globalData.newsInfo["" + typeId])
      }
      return utils.get({ "type": typeId }).then(res => {
        if (!that.globalData.newsInfo) that.globalData.newsInfo = {};
        that.globalData.newsInfo["" + typeId] = res.result.data;
        resolve(res.result.data);
      })
    });
  },
  globalData: {
    newsInfo: null,
    userInfo: null
  }
})
  • 其中globalData属性是全局对象,各个page层级的都可以访问,getUserInfo、getNewsInfo是全局方法,所有page下均可调用,onLaunch事件是小程序app启动调用的事件,只走一次,类似的还有page下的onLoad、onShow等,分别表示页面加载后调用、页面显示即调用等。app.json文件是用来配置页面、窗体、tabBar等,比如我们这里配置底部工具栏四个,可如下配置:
{
  "pages": [
    "pages/hot/index",
    "pages/my/index",
    "pages/my/feedback/index",
    "pages/my/information/index",
    "pages/dynamic/index",
    "pages/dynamic/detail"
  ],
  "window": {
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#4BC1D2",
    "navigationBarTitleText": "业务GO",
    "navigationBarTextStyle": "white"
  },
  "tabBar": {
    "color": "#353535",
    "selectedColor": "#4BC1D2",
    "borderStyle": "black",
    "backgroundColor": "#FFF",
    "list": [
      {
        "pagePath": "pages/hot/index",
        "text": "热点",
        "iconPath": "static/images/[email protected]",
        "selectedIconPath": "static/images/[email protected]"
      },
      {
        "pagePath": "pages/circle/index",
        "text": "圈子",
        "iconPath": "static/images/[email protected]",
        "selectedIconPath": "static/images/[email protected]"
      },
      {
        "pagePath": "pages/tool/index",
        "text": "工具",
        "iconPath": "static/images/[email protected]",
        "selectedIconPath": "static/images/[email protected]"
      },
      {
        "pagePath": "pages/my/index",
        "text": "我的",
        "iconPath": "static/images/[email protected]",
        "selectedIconPath": "static/images/[email protected]"
      }
    ]
  },
  "networkTimeout": {
    "request": 60000,
    "downloadFile": 60000
  }
}
  • app.wxss:全局样式类,相同样式会被各个page下的样式覆盖。比较坑的一点是wxss中的样式部分特性不支持,比如background-image属性不支持项目本地路径,可使用base64或者网络图片地址替换,样式不支持层级调用等。默认有个page样式可修改页面层级的部分显示。

4、关于wx.request请求

小程序下面暂不支持es6语法,但是我们可以使用一些promise工具函数实现promise调用,比如可以自己封装promise版本的request请求如下:

const DOMAIN = ‘https://v.juhe.cn/toutiao/index‘;
const KEY = ‘c419699e576519892ebf87bbd3c8158c‘;

// 小程序上线需要https
function request(method, data = {}) {
  data.key = KEY;
  // wx.showNavigationBarLoading()
  wx.showToast({
    title: ‘加载中‘,
    icon: ‘loading‘,
    duration: 10000
  })
  return new Promise((resolve, reject) => {
    wx.request({
      url: DOMAIN,
      method: method,
      data: data,
      header: { ‘content-type‘: ‘application/json‘ },
      method: method.toUpperCase(), // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
      success: function (res) {
        // wx.hideNavigationBarLoading()
        wx.hideToast();
        resolve(res.data)
      },
      fail: function (msg) {
        console.log(‘reqest error‘, msg)
        // wx.hideNavigationBarLoading()
        wx.hideToast();
        reject(‘fail‘)
      }
    })
  })
}

然后导出即可外部使用:

module.exports = {
  categories, Promise,
  get: requestGet, post: requestPost, request,showLoading,requestDynamic
}

这里我们可以为每次请求添加“加载中”效果,很简单在每次请求前面添加如下代码:

wx.showToast({
    title: ‘加载中‘,
    icon: ‘loading‘,
    duration: 10000
  })

请求结束后再次隐藏toast即可:

wx.hideToast();

5、关于免费api调用

小程序开发时我们难免会进行服务调用,首先必须在这里设置request请求的域名地址(wx规定域名必须是https的才行):

当然,免费的api还是有很多,不过大多数都是要进行认证的,不认证的话使用会有部分限制,不过短期不影响。

6、关于项目上传、审核

项目上传需要使用wx的开发工具:

扫码上传之后在这里我们就能看到上传的版本信息:

当然,上传之后是“开发版”,可以直接在此基础上进行提交审核或者选为体验版,体验版的话管理员账户可以自行指定体验者的微信账号,这样的话,即使小程序不发布,体验者也可以和开发者一样扫码预览项目效果,体验者的设置在这里进行:

7、关于数据渲染及页面传参

首先是数据渲染,每个页面的数据来源是page对象下的data属性,然后在页面里通过双大括号的方式进行数据渲染,了解模板引擎的一看就知道了,觉得小程序这种做法类似于一些mvvm框架,数据层修改数据会直接同步到视图层。当然渲染时支持条件判断、循环处理等,这些基本的功能没有少。

其次是页面跳转及传参,这里主要有2种方式,分别介绍如下:

一是使用navigator组件,该组件里面可包含一系列的view组件,navigator组件必须指定url属性,代表单击跳转地址(微信小程序不支持外链跳转,有点失望),使用如下:

<navigator url="detail?id={{item.id}}">
            <template is="mainTabCell" data="{{item}}" />
          </navigator>

这里detail即为某页面名称,参数传递类似get请求时参数拼接传递的方式,当然在js中进行数据获取也比较简单:

onLoad:function(options){
    data_id = options.id;
    //页面初始化 options为页面跳转所带来的参数
    this.refreshNewData();

  }

onLoad事件默认有个options参数,该参数navigator组件传过来的参数,然后进行处理即可。

二是页面跳转,小程序支持如下4种导航跳转:

参数传递的话直接写在其url属性上,类似如下:

wx.navigateTo({
  url: ‘test?id=1‘
})

8、关于事件处理及分类

小程序中的事件总得分为2种,一种是冒泡、一种是非冒泡事件,使用bind开头绑定的事件为冒泡事件,意思是说如果同一个事件名称,上下两个页面层组件均绑定了该事件的话,那么底下组件的事件处理会先执行,然后再继续执行上层组件的相应代码;使用catch开头绑定的事件不冒泡,事件只会被处理一次。然后是事件对象,事件处理到达page下的js后,会默认传一个event对象,该对象类似如下:

比如如下代码:

<view class="sv__item {{ currentTab ==item.id ? ‘active‘:‘‘ }}" bindtap="changeCategory" data-id="{{ item.id }}" data-index="{{ item.index }}">
          {{ item.name }}
        </view>
 

我们使用了bindTap事件处理view单击,参数传递使用data-xxx=‘yyyy‘的形式,其中xxx为key,相应的yyyy为传入的参数值,在事件处理中我们可以这样获取参数:

changeCategory: function (ev) {
        var that = this;
        var id = ev.currentTarget.dataset.id;
        this.setData({
            currentTopItem: ev.currentTarget.dataset.index
        });
}

通过ev事件对象的currentTarget.dataset.xxx的形式获取xxx参数值即可,顺便说下,页面的参数设置一般使用setData方法进行,而globalData的设置可以直接通过getApp().globalData=xxx的形式即可。

9、关于模板使用

小程序提供模板功能,个人感觉类似于vue中的组件概念,模板可以被各个需要的页面进行引入调用,模板的定义使用如下方式:

<template name="msgItem">
  <view>
    <text> {{index}}: {{msg}} </text>
    <text> Time: {{time}} </text>
  </view>
</template>

在需要调用模板的页面通过以下代码片段使用:

<template is="msgItem" data="{{...item}}"/>

其中msgItem为模板定义时指定的name,item为传入的参数对象,该对象下有idnex、msg、time三个键值对。注意如果模板文件与调用不在同一个文件的话必须先进行模板文件的导入,直接在页面中使用import导入模板页面即可。

10、关于小程序调试

wx开发者工具自带调试功能,可直接对代码、样式文件、缓存等进行编辑查看,还支持console控制台打印:

总结:

1、流畅性:比H5的应用流畅性好,个人觉得相比原生还差一点,介乎两者之间

2、开发者工具:自动提示功能有限,大部分情况下要开发者自己手码

3、开发者工具里面看到的效果偶尔和微信里面看到的不同:比如图片预览、background-image图片显示等

4、登录方式各异:很多小程序都直接使用微信登录,也有自己做登录的,不是很统一

5、布局:小程序使用css3的flex布局,灵活性较高

6、巧用工具:小程序开发有些工具可以方便实用,比如wept,可以支持在浏览器中实时预览小程序页面布局效果,这样开发和设计可以分工开来了;又如wxParse,这个觉得比较强大,可以用来处理一些复杂详情页的数据显示等。

时间: 2024-10-11 05:18:17

wx小程序初体验的相关文章

【尝新】微信小程序初体验

文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小demo ,样例中的文件说明如下: 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page. 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: app.js 是 小程序逻辑 app.json 是 小程序公共设置 app.wxss 否 小程序公共样式表 一个小程序页面由四个文

小程序初体验:手把手教你写出第一个小程序(一)

本文笔者将根据quick start中的范例代码,带大家简单地剖析一下小程序的运行方式,并介绍小程序开发中一些通用的特性,带着大家一步步写出自己的小程序. 适用对象:前端初学者,对小程序开发感兴趣者 tips:由于笔者也是一位前端菜鸟,所以尽量用简单直白的语言为大家讲解,如有说的不到位的地方,还望多多指教. 吊了我们一年胃口的小程序终于和大家见面了.经过了一天的发酵,小程序已经成为了今天的超级头条(汪汪哭晕在厕所). 经历了一天媒体对小程序的狂轰滥炸,相信大家对于小程序一定充满了好奇.与其跟风转

微信小程序初体验遇到的坑

今天,2017年1月9日凌晨,微信小程序如约上线.2007年1月9日,整整10年前的今天,苹果的iPhone手机正式问世! 经不起新技术的诱惑了,想试着开发一下看看.刚开始遇到很多坑,在这里记录一下,有遇到同样坑的可以参考 1.我用的是mac版本的开发工具,运行官方demo后报错 Failed to load resource: net::ERR_NAME_NOT_RESOLVEDhttp://1351598279.appservice.open.weixin.qq.com/appservice

wxWidgets初学者导引(3)——wxWidgets应用程序初体验

wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 3 wxWidgets应用程序初体验 本文中所有的体验,在Code::Blocks中进行. 为了在Code::Blocks中编译运行C++写的wxWidgets程序,需要再做些设置. 首先,需要在环境变量里添加一个wxWidgets根目录环境变量.设置方法类似于2.3

wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 3 wxWidgets应用程序初体验 本文中全部的体验,在Code::Blocks中进行. 为了在Code::Blocks中编译执行C++写的wxWidgets程序,须要再做些设置. 首先,须要在环境变量里增加一个wxWidgets根文件夹环境变量.设置方法

每天一点GO语言——Linux环境下安装Go语言环境以及编写Go语言程序初体验

每天一点GO语言--Linux环境下安装Go语言环境以及编写Go语言程序初体验 一.安装Go语言环境 [[email protected] opt]# yum -y install wget git [[email protected] opt]# wget -c https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz [[email protected] opt]# tar -zxvf go1.10.3.linux-amd64

小程序初接触

1.获取微信小程序的AppID 登录 https://mp.weixin.qq.com ,可以在网站的 "设置"-"开发者设置"中,查看微信小程序的AppID了,注意不可直接使用服务号或者订阅号的AppID 2.创建项目 我们需要通过开发者工具(https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html),来完成小程序的创建和代码编辑 开发者工具安装完成后,打开并使用微信扫码登录.选择创建&quo

不安分的android开发者(小程序初尝试,前后台都自己做)

前言 作为一个稍微有点想法的程序员来说,拥有一个自己开发,自己运营,完全属于自己的应用,应该是很多人的梦想.刚毕业那会,自己的工作是做游戏,于是也和朋友业余时间开发一些小游戏玩玩,可是终究不成气候,而且自己也只能做做单机小游戏.于是慢慢的也就失去了兴趣,尤其是自己从游戏行业转到app开发,对游戏也就没那么大兴趣了.再到后来自己买了一个windowsphone手机,当时判断windowsphone会崛起(现在看来,当时自己的眼光还是歪了,哈哈),于是呼买了一个开发者账号,自己学习c#开发,做了一个

wx小程序知识点(二)

二.WXML和HTML的异同.WXSS和CSS的异同 (1)WXML和HTML 相同点:都是用来描述页面结构的,由标签.属性组成 不同点:标签名不一样,小程序标签名更少: 小程序多了 wx:if 这样的属性和 {{}} 的表达式: 小程序只能在微信开发者工具中预览,而HTML可以在浏览器中预览: 小程序对组件进行了重新封装: 小程序运行在 JS Core 内,没有DOM树和window对象,无法使用window对象和document对象 (2)WXSS和CSS 相同点:都是用来描述页面的样式 不