微信小程序入门学习-- 简易Demo:计算器
简单学习下微信小程序
官网 简易教程 · 小程序
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:计算器的更多相关文章
- 微信小程序入门学习
前(che)言(dan): 近几天,微信小程序的内测引起了众多开发人员的热议,很多人都认为这将会成为一大热门,那么好吧,虽然我是一个小白,但这是个新玩意,花点时间稍稍钻研一下也是无妨的,谁让我没有女朋 ...
- 微信小程序入门学习之事件 事件对象 冒泡非冒泡事件(1)
这关于事件的学习,可以自己复制到微信开发者工具上自己运行试试. 首先这里有两个文件.js 和.wxml 文件 首先给出.js文件下代码 // pages/news/news.js Page({ /** ...
- 微信小程序入门一: 简易form、本地存储
实例内容 登陆界面 处理登陆表单数据 处理登陆表单数据(异步) 清除本地数据 实例一: 登陆界面 在app.json中添加登陆页面pages/login/login,并设置为入口. 保存后,自动生成相 ...
- 微信小程序开发学习资料
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 天河微信小程序入门《三》:打通任督二脉,前后台互通
原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- 微信小程序入门篇
微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教 ...
- 微信小程序入门-刘志敏-专题视频课程
微信小程序入门-269人已学习 课程介绍 微信小程序入门基础,给入门级程序员好的教程.教程中对小程序的介绍到小程序的基本使用都做了详细的介绍,教程以实用的实现作为案例,如列表下拉刷新.抽 ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
随机推荐
- 转: 利用RabbitMQ、MySQL实现超大用户级别的消息在/离线收发
由于RabbitMQ中只有队列(queue)才能存储信息,所以用RabbitMQ实现超大用户级别(百万计)的消息在/离线收发需要对每一个用户创建一个永久队列. 但是RabbitMQ节点内存有限,经测试 ...
- object-c全局变量
跟c++一定,在.m里Obj*obj=NULL,在.h里extern Obj*obj 即可.
- IOS 拍照旋转修正
- (UIImage *)fixOrientation:(UIImage *)aImage { // No-op if the orientation is already correct if (a ...
- Atitit.判断汉字的编码 regedit 注册表里面的reg_sz
Atitit.判断汉字的编码 regedit 注册表里面的reg_sz 1. 可以判断出是unicode编码1 2. 有下面分割ucs2 大头小偷编码1 3. 使用小偷编码测试1 4. 注册表里面的r ...
- Atitit. 衡量项目规模 ----包含的类的数量 .net java类库包含多少类 多少个api方法??
Atitit. 衡量项目规模 ----包含的类的数量 .net java类库包含多少类 多少个api方法?? 1 framework 4.5 (10万个api)1 2 Jdk8 57M1 3 Gi ...
- 安装yii2高级应用模板
composer global require "fxp/composer-asset-plugin:1.0.0" composer create-project --prefer ...
- numpy.ravel()/numpy.flatten()/numpy.squeeze()
numpy.ravel(a, order='C') Return a flattened array numpy.chararray.flatten(order='C') Return a copy ...
- ajax请求的data数据格式
ajax提交data类型 一.问题来源 今天使用ajax时,发现get传data时,传递json字符串时传不过去参数,所以做了一些实验测试ajax的get和post的传递data时的不同. 二.概念 ...
- hdu 1022 Train Problem
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- linux学习笔记24---命令grep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是global search regular expression(RE) and ...