最近,微信小程序开放了个人开发者,所以立刻申请了一个来试试。
小程序从之前刚出来时在开发者圈火极一时,而现在却用的不多,也有限制多的缘故,所以在开放了部分限制之后再来看他的发展吧。
这里讨论一下初探小程序的一点想法。
在小程序手册中也已经很明白了,把视图和逻辑分开,有点类似于react的虚拟dom,不直接去操作dom,而是改变数据之后自动刷新页面的渲染,使改动最小化。最初的试验感觉他的数据应该是单向绑定,也就是m-v而没有v-m。
另外,微信写了各种接近微信ui的组件供直接调用。html代替用的是wxml,这个可以看手册了解。关于css,他用的是wxss,wxss基本和css是相同的。js的话就是变化最大的地方,因为完全dom没有关系,直接操作数据就可以改变页面内容。所以在了解之后其实开发速度是很快的。
使用过后的感觉便是比起一般的网页流畅一些,但相较于app可能还有距离。
开发的话,先在微信公众平台新注册一个,选择小程序。下载开发者工具,再本地新建一个空文件夹,之后添加项目到这里面,就会自动创建一个示例demo。
这里简单做一个文字二维码的功能的小程序。
wxml部分基本直接用组件就行 ,然后绑定一下事件,如bindtap,{ {} }是从js里传入的数据。
<!--index.wxml-->
<view class="container">
<form bindsubmit="formSubmit">
<view class="section">
<input placeholder="请输入想说的话" auto-focus name="input"/>
</view>
<view class='btn'>
<button formType="submit">提交</button>
</view>
</form>
<view class="img">
<image src="{ {imgurl} }" bindtap="ch"></image>
</view>
</view>
wxss因为和css基本一样就不写太多了,而且ui的话很多组件已经做好了。
/**index.wxss**/
.btn{
margin-top: 10%;
}
.section{
border-bottom:solid 1px lightgrey;
font-size:50rpx;
}
js里,getApp()从app.js和app.json获取配置信息,data便是可以传入wxml里的数据下面是两个事件,一开始的话会自动创建几个默认事件—开始加载,加载完成等等。然后可以自己添加事件。wx.xxx就是调用接口,接口具体也可以看文档。wx.request是获取服务器数据,这里首先需要到微信公众平台–设置里配置一下服务器域名,否则会报错。写多了容易发现有各种回调,所以要很清晰每一步。
//index.js
//获取应用实例
var app = getApp()
Page({
data: {
imgult:'',
imgfile:''
},
ch:function(e){
var that=this
if(that.data.imgfile==''){
return
}
wx.previewImage({
current: that.data.imgfile,
urls: [that.data.imgfile]
})
},
formSubmit: function(e) {
var that = this
wx.request({
url: 'https://xxx.cn/test.php',
data: {
data: e.detail.value.input ,
},
header: {
'content-type': 'application/json'
},
success: function(res) {
that.setData({
imgurl:res.data
}),
wx.downloadFile({
url: 'https://xxx.cn/EXAMPLE_TMP_SERVERPATHtest.png',
success: function(res) {
var tempFilePaths = res.tempFilePath
that.setData({
imgfile:res.tempFilePath
})
console.log(that.data.imgfile)
}
})
}
})
},
})
服务器端用了phpqrcode来生成二维码。下面是参考代码。效果:如果是数字便生成添加联系人的二维码,如果是文字,就产生文字二维码。然后通过base64编码到返回,小程序获取到64编码的图片字符放到img中就可以直接展示。
<?php
include('phpqrcode/qrlib.php');
include('config.php');
$tempDir = EXAMPLE_TMP_SERVERPATH;
$a=$_GET['data'];
if(!is_numeric($a)){
QRcode::png($a,$tempDir.'test.png',QR_ECLEVEL_L, 10);
$str = file_get_contents($tempDir.'test.png');
echo "data:image/png;base64,".base64_encode($str);
}else{
$name = '';
$phone = $a;
$codeContents = 'BEGIN:VCARD'."\n";
$codeContents .= 'FN:'.$name."\n";
$codeContents .= 'TEL;WORK;VOICE:'.$phone."\n";
$codeContents .= 'END:VCARD';
QRcode::png($codeContents, $tempDir.'test.png', QR_ECLEVEL_L, 10);
$str = file_get_contents($tempDir.'test.png');
echo "data:image/png;base64,".base64_encode($str);
}
赞赏一下

支付宝打赏
微信打赏