简单学习下微信小程序

官网 简易教程 · 小程序

https://mp.weixin.qq.com/debug/wxadoc/dev/

需要通过开发者工具,来完成小程序创建和代码编辑。

下载安装,运行程序,点击添加项目,弹窗,可以选无AppId,选择程序路径,勾选quick start。

app.json 配置文件

wxxml --相当于html

wxss--相当于css

在pages文件夹新建文件夹

修改配置app.json 这样系统启动时会运行call文件项目

"pages":[
"pages/call/call",
"pages/logs/logs"
]

call.wxxml

 <view class="content">
<view class="screen">{{screenData}}</view> <view class="btnGroup">
<view class="item orange" bindtap="clickButton" id="{{id1}}">back</view>
<view class="item orange" bindtap="clickButton" id="{{id2}}">clear</view>
<view class="item orange" bindtap="clickButton" id="{{id3}}">+/-</view>
<view class="item orange" bindtap="clickButton" id="{{id4}}">+</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id5}}">9</view>
<view class="item blue" bindtap="clickButton" id="{{id6}}">8</view>
<view class="item blue" bindtap="clickButton" id="{{id7}}">7</view>
<view class="item orange" bindtap="clickButton" id="{{id8}}">-</view>
</view> <view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id9}}">6</view>
<view class="item blue" bindtap="clickButton" id="{{id10}}">5</view>
<view class="item blue" bindtap="clickButton" id="{{id11}}">4</view>
<view class="item orange" bindtap="clickButton" id="{{id12}}">*</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id13}}">3</view>
<view class="item blue" bindtap="clickButton" id="{{id14}}">2</view>
<view class="item blue" bindtap="clickButton" id="{{id15}}">1</view>
<view class="item orange" bindtap="clickButton" id="{{id16}}">/</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickButton" id="{{id17}}">0</view>
<view class="item blue" bindtap="clickButton" id="{{id18}}">.</view>
<view class="item blue" bindtap="history" id="{{id19}}">history</view>
<view class="item orange" bindtap="clickButton" id="{{id20}}">=</view>
</view> </view>

{{screenData}} : {{}}绑定数据,这里表示绑定data中的 screenData。

bindtap="clickButton"   :绑定点击事件

call.js

 Page({

   /**
* 页面的初始数据
*/
data: {
id1: "back",
id2: "clear",
id3: "positive",
id4: "+", id5: "9",
id6: "8",
id7: "7",
id8: "-", id9: "6",
id10: "5",
id11: "4",
id12: "*", id13: "3",
id14: "2",
id15: "1",
id16: "/", id17: "0",
id18: ".",
id19: "history",
id20: "=", screenData : "0",
lastIsOperator : false,
arr : [],
logs : []
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) { }, /**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () { }, /**
* 生命周期函数--监听页面显示
*/
onShow: function () { }, /**
* 生命周期函数--监听页面隐藏
*/
onHide: function () { }, /**
* 生命周期函数--监听页面卸载
*/
onUnload: function () { }, /**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () { }, /**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () { }, /**
* 用户点击右上角分享
*/
onShareAppMessage: function () { },
history: function (event){
wx.navigateTo({
url: '../list/list'
}) },
clickButton:function(event){
console.log(event.target.id); var id = event.target.id; if (id == this.data.id1){ //BACK
var data = this.data.screenData;
if(data == 0){
return;
}
data = data.substring(0, data.length-1);
if(data == "" || data == "."){
data = 0;
}
this.setData({ screenData: data });
this.data.arr.pop(); //退格 -1
}
else if (id == this.data.id2){ //clear
this.setData({ screenData: "0" });
this.data.arr.length = 0; //数组清空 } else if (id == this.data.id3) { // positive negative
var data = this.data.screenData;
if(data == 0){
return;
}
var firstChar = data.substring(0,1);
if (firstChar == "-"){
data = data.substring(1);
this.data.arr.shift();//去除第一个元素
}else{
data = "-" + data;
this.data.arr.unshift("-"); //第一个元素增加"-"
}
this.setData({ screenData: data }); } else if (id == this.data.id20) { // =
var data = this.data.screenData;
if (data == 0){
return;
}
var lastChar = data.substring(data.length - 1, data.length);
if(isNaN(lastChar)){
return;
}
var num = "";
var lastOperator;
var arr = this.data.arr;
var optarr =[];
for (i in arr){
if (isNaN(arr[i]) == false || arr[i] == this.data.id18 || arr[i] == this.data.id3 ){
num += arr[i];
}else{
lastOperator = arr[i];
optarr.push(num);
optarr.push(arr[i]);
num = "";
}
}
optarr.push(Number(num));
var result = Number(optarr[0])*1.0;
console.log(optarr);
console.log(result); for(var i=1, len = optarr.length; i<len; i++){
if(isNaN(optarr[i])){
if (optarr[i] == this.data.id4){
result += Number(optarr[i+1]);
} else if (optarr[i] == this.data.id8) {
result -= Number(optarr[i + 1]);
} else if (optarr[i] == this.data.id12) {
result *= Number(optarr[i + 1]);
} else if (optarr[i] == this.data.id16) {
result /= Number(optarr[i + 1]);
}
}
}
this.data.logs.push(data + "=" + result); //存入history
wx.setStorageSync("calllogs", this.data.logs);
console.log("calllogs:" + wx.getStorageSync("calllogs"));
this.data.arr.length = 0; //数组清空
this.data.arr.push(result);
this.setData({screenData : result + ""}); }else{ //click number or +-*/
if (id == this.data.id4 || id == this.data.id8 || id == this.data.id12 || id == this.data.id16) { if (this.data.lastIsOperator == true || this.data.screenData == 0) {
return;
}
} var sdata = this.data.screenData == 0 ? "" : this.data.screenData;
var data = sdata + event.target.id ; this.setData({ screenData: data });
this.data.arr.push(id); //event传入 每次点击的放入数组 if (id == this.data.id4 || id == this.data.id8 || id == this.data.id14 || id == this.data.id16){
this.setData({ lastIsOperator: true });
}else{
this.setData({ lastIsOperator: false });
}
}
}
})

call.js

data:数据

clickButton:自定义事件/方法

--event.target.id:页面目标元素的id。可以在点击事件clickButton 打断点看下event对象

--this.data.id1   :“back”(this当前pages对象 ),即代表下面内容

Page({

/**
* 页面的初始数据
*/
data: {
id1: "back" ... }

this.setData({ screenData: "0" });  //设置数据  具体查看api

 /* pages/call/call.wxss */

 .content{
height: 100%;
display: flex;
display: -webkit-flex;
flex-direction: column;
align-items: center;
box-sizing: border-box;
padding-top: 30rpx;
}
.screen{
width: 720rpx;
height: 100rpx;
line-height: 100rpx;
padding-right: 10rpx;
margin-bottom: 30rpx;
border-radius: 5px;
border:1px solid #f8f8f8;
}
.btnCroup{
display: -webkit-flex;
display: flex;
flex-direction: row;
}
.item{
width:150rpx;
min-height:100rpx;
margin:5rpx;
border-radius:5px;
text-align:center;
line-height:150rpx;
float :left;
}
.orange{
background-color: #af4f00;
}
.blue{
background-color: #0a4ff0;
}

call.wxss

其他:跳转到历史记录

增加list

,并修改app.json文件

 "pages":[
"pages/call/call",
"pages/list/list"
]

在call.js中 wx.navigateTo() //API

  history: function (event){
wx.navigateTo({
url: '../list/list'
})
},

利用  wx.setStorageSync("calllogs", this.data.logs);  //类似sessionStorage页面间传送数据

在list.js  关键代码

 data: {
logs:[]
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var logs = wx.getStorageSync("calllogs");
this.setData({ "logs": logs});
},

list.wxml

<view class="content">
<block wx:for="{{logs}}" wx:for-item="log">
<view class="item">{{log}} </view>
</block>
</view>

此demo参考视频做的:

http://www.iqiyi.com/w_19rsuqbvyh.html

微信小程序入门学习-- 简易Demo:计算器的更多相关文章

  1. 微信小程序入门学习

    前(che)言(dan): 近几天,微信小程序的内测引起了众多开发人员的热议,很多人都认为这将会成为一大热门,那么好吧,虽然我是一个小白,但这是个新玩意,花点时间稍稍钻研一下也是无妨的,谁让我没有女朋 ...

  2. 微信小程序入门学习之事件 事件对象 冒泡非冒泡事件(1)

    这关于事件的学习,可以自己复制到微信开发者工具上自己运行试试. 首先这里有两个文件.js 和.wxml 文件 首先给出.js文件下代码 // pages/news/news.js Page({ /** ...

  3. 微信小程序入门一: 简易form、本地存储

    实例内容 登陆界面 处理登陆表单数据 处理登陆表单数据(异步) 清除本地数据 实例一: 登陆界面 在app.json中添加登陆页面pages/login/login,并设置为入口. 保存后,自动生成相 ...

  4. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  5. 天河微信小程序入门《三》:打通任督二脉,前后台互通

    原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...

  6. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  7. 微信小程序入门篇

    微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教 ...

  8. 微信小程序入门-刘志敏-专题视频课程

    微信小程序入门-269人已学习 课程介绍        微信小程序入门基础,给入门级程序员好的教程.教程中对小程序的介绍到小程序的基本使用都做了详细的介绍,教程以实用的实现作为案例,如列表下拉刷新.抽 ...

  9. 天河微信小程序入门《四》:融会贯通,form表单提交数据库

    天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...

随机推荐

  1. Could not create and/or set value back on to object .

    严重: Error building beanorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creat ...

  2. jpush推送

    1.下载这个压缩包,vendo文件夹,复制里面的vendo到该文件夹下. 解压 2.修改AppKey和MasterSecret就ok 了

  3. easyui 动态加载语言包

    解决办法是:把语言包中的语言类型写到cookie,动态修改cookie中的语言名称,修改完后重新渲染一下页面. 在页面加载完成后,先判断cookie存不存在,如果不存在就写入默认语言,存在就给easy ...

  4. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  5. MAC 通过brew安装软件

    1.安装brew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/instal ...

  6. JNI调用实例

    1. 环境 Windows7-64Bit VS2010-32Bit JDK1.8-64Bit 2. 步骤 2.1 创建NativePrint类 public class NativePrint { p ...

  7. 分页技术框架(Pager-taglib)学习三(pager-taglib中传递参数时中文乱码问题)

    一.问题描述 问题: 使用<pg:param name="key" />标签传递中文参数时,会有乱码. 原因: 因为它默认是用gb2312来对添加的参数进行编码,如果你 ...

  8. UVA Problem B: Fire!

    Problem B: Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and t ...

  9. [转]c++ 为什么要将基类的析构函数声明为Virtual?

    http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/12/2721410.html

  10. Linux编程学习路线

    参考这篇博客 一本书一本书的啃吧,再多撸点项目