简单学习下微信小程序

官网 简易教程 · 小程序

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. C#指南,重温基础,展望远方!(3)类型和变量

    C# 有两种类型:值类型和引用类型. 值类型的变量直接包含数据,而引用类型的变量则存储对数据(称为“对象”)的引用.对于引用类型,两个变量可以引用同一对象:因此,对一个变量执行的运算可能会影响另一个变 ...

  2. Windows 7/8/8.1 误删EFI启动项,无法开机解决方式(U盘+原版镜像)

    今天手贱把Windows 7的启动项删了.由于是GPT分区,EFI引导的,又不像MBR那般easy解决 想想重装系统也麻烦,并且仅仅是删了个启动项而已.就不是必需去费那个时间 想了一下,Windows ...

  3. SQL 将两个结构相同的表合并到成一个表

    select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...

  4. Java小型知识点

    1. API 1.1 byte[].File.InputStream 互相转换 1.将File.FileInputStream 转换为byte数组: File file = new File(&quo ...

  5. 多线程-ReentrantReadWriteLock

    ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务.这样做虽然保证了实例变量的线程安全,但效率却是非常低下的.JDK中 ...

  6. 品茗论道说广播(Broadcast内部机制讲解)(上)

    1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个不是本文关心的重点,我们希望探索得再深入一点儿.我想,许多人也不 ...

  7. C++语言基础(22)-转换构造函数和类型转换函数

    一.转换构造函数 将其它类型转换为当前类类型需要借助转换构造函数(Conversion constructor).转换构造函数也是一种构造函数,它遵循构造函数的一般规则.转换构造函数只有一个参数. # ...

  8. ORACLE 中 TRANSLATE的用法

    --TRANSLATE(string,from_str,to_str) --to_str和from_str中的字符一一对应 --如果string里有,from_str字符集里没有的字符,将保留 --如 ...

  9. eclipse的源代码编辑窗口可以拖出来单独使用的哦

    这在你边阅读文档边写代码的时候非常有用的!整个eclipse窗口吧,太大,挡事,把源代码编辑的标签拖出来,就成为一个单独的窗口了,也就记事本大小,而且代码提示自动补全什么的一样不少~ 虽然这个代码编辑 ...

  10. C扩展php的方法(制作php扩展库)

    用PHP调用C扩展整个配置过程在CentOS下   今天终于把C扩展加入到PHP中了,并且可以调用,废话就不说了,看下文.   一.必须先要安装Apache和mysql,这两个的安装过程我就不说了. ...