目录:

  1. 数据绑定

  2. 条件渲染

  3. 列表渲染

  4. API

FAQ:

<block wx:for> 和 <view wx:for>的区别

wx:if 什么情况下判断为假

坑列表:

微信版本6.3.29没有wx:showModal方法

数据为null时页面会呲

input组件发生输入事件后,其“数据绑定机制”不再工作

image组件不支持hidden属性


数据绑定

字符串运算

  <view class="price">{{info.name + info.family.addr}}</view>
  • 如果info是空,不会报错,生成的结果和JS相同。undefined + undefined = NaN
  • 如果family是空,不会报错,生成的结果和JS相同。string + undefined = stringundefined
  • 如果属性都有效,正常的字符串加法运算

之所以这样的原因是因为微信的语法解析分三部分,优先级高的点引用在先,加法在后。是这样的

    var scr = "info.name + info.family.addr".split(' ')
var oper = scr[1]; "info.name".split('.').find in dataMap
"info.family.addr".split('.') find in dataMap
if(null) {
return undefined
}
//注意:想想oper是undefined会怎样?
eval(a oper b) || ''

  

目前支持的operation有所有算术运算、位运算和逻辑运算,三目运算。所以就不难理解下面的写法将会引发致命错误

    <view class="price">{{info.name info.family.addr}}</view>

因为找不到operation,View Thread抛出错误。渲染失败,页面呲掉。

    <view class="price">{{info.name}}{{info.family.addr}}</view>

这是最安全的写法,不过很难看懂。它相当于输出(渲染)

console.log(a||''); console.log(b||'');

然而下面的,哈哈,它就不是一个运算了,

    <view class="price">{{info.name}} + {{info.family.addr}}</view>

而是输出(渲染)

    console.log(a||''); console.log('+'); console.log(b||'');
 

一个坑

 <view class="price">${{v}}</view>

注意:上面的美元符号。这种情况下,页面会抛出异常

Uncaught ReferenceError: $gwx is not defined

如果你知道这个错的原因,请告诉我。。。

 

条件渲染

wx:if

  <view wx:if="{{name}}">{{name}}</view>
  • 当name是null,0,false,特别是空字符串''时,这些js判断为假的值wx:if也判断为假。

Tip: 此时的行为和js相同。

  <view wx:if="{{obj.val.name}}">{{name}}</view>
  • 当obj不存在的时候,即:obj = undefined。不管引用了多少层。wx:if什么都不做,并不出错。

Tip: 此时的行为和js不同,不过极可能正是你想要的效果。

  • 但是,尤其要注意。当obj = null的时候,上面的代码会抛出异常。 原因是,微信小程序渲染线程中,把null当成object。 当尝试访问null的某个属性(这里为val)时,发生了异常。 同样,在wx:for中也会这样。微信小程序渲染线程的本来目的是要容错, 那么起码在版本v0.11.112301之前,可以说这里的情况是其自身的一个bug。
  • 除了null,NaN也是这样。

列表渲染

wx:for

  <block wx:for="{{obj}}"><view>{{item}}</view></block>
  • 如果obj是null, '', false等js认为的空,什么都不做
  • 如果obj是{},[]空对象,什么都不做
  • 如果是字符串,则每个字符为一个元素
  • 如果是个对象,则输出value,item为value。比如{id:1, name:'abc'},输出1和abc
  • 如果是个数组,则输出每个元素,item为元素

Tip: 此时的行为和js相同。

  <block wx:for="{{obj.data.name}}"><view>{{item}}</view></block>

当obj不存在的时候,即:obj=undefined。不管引用了多少层。wx:if什么都不做,并不出错。

Tip: 此时的行为和js不同,不过极可能正是你想要的效果。

  • 尤其要注意。当obj = null时,页面会异常。

<block wx:for> 和 <view wx:for>的区别

<block wx:for> <view wx:for>

<block wx:for="{{[1,2]}}">
  <view>hello</view>
  <view>world</view>
</block>

<view wx:for="{{[1,2]}}">
  <view>hello</view>
  <view>world</view>
</view>

<view>hello</view>
<view>world</view>
<view>hello</view>
<view>world</view>

<view>
  <view>hello</view>
  <view>world</view>
</view>
<view>
  <view>hello</view>
  <view>world</view>
</view>


API

wx.request(OBJECT)

  • 客户端超时

{"errMsg":"request:fail"}

  • 服务器超时

{"errMsg":"request:fail"}

返回的err不是个Error对象,是个普通对象

  • 成功返回

{errMsg: "request:ok", data: "", statusCode: 500}

@all,我刚才写了一个服务端,制造各种错误,观察wx.request API的行为。
发现,只要回调fail说明网络异常(不管客户端,服务端谁导致的);success回调,说明网络是通的(即使statusCode是500)。

我的意思是:大家统一下 ,如果要处理'网络错误,请稍后重试' 这种错误,都放在fail中。
而像500,404这种错,可以酌情给出应用相关的错误提示。

微信版本6.3.29没有wx:showModal方法

发现一个坑:下面的例子,页面会呲

Page({
data: {
icons: null
}
}) <view data-src="{{icons.search}}">hello</view>

input组件发生输入事件后,其“数据绑定机制”不再工作

fixed: 该问题在 2017-03-09 发现已经解决

这个问题非常诡异,我花了5个小时才解决它

问题是这样的

<!--index.wxml-->
<input type="text" placeholder="请输入关键字" bindinput="inputKeyword" value="{{keywords}}"/>
<view bindtap="clearInput">点我清空文本框</view> //index.js
Page({
data: {
keywords: ''
},
clearInput: function(e) {
console.log('click');
this.setData({
keywords: ''
});
},
onLoad: function () {
console.log('onLoad')
}
});

上面的程序在运行时,会发现清除不能生效

--------------------------------------华丽的转身-----------------------------------

下面是解决方法

<!--index.wxml-->
<input type="text" placeholder="请输入关键字" bindinput="inputKeyword" value="{{keywords}}"/>
<view bindtap="clearInput">点我清空文本框</view> //index.js
Page({
data: {
keywords: ''
},
clearInput: function(e) {
console.log('click');
this.setData({
keywords: '-'
});
this.setData({
keywords: ''
});
},
onLoad: function () {
console.log('onLoad')
}
});

其实是添加了下面的一句话。

image组件不支持hidden属性

用微信自带的例子说明,下面的程序不能生效

    <image hidden="{{true}}" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>

想要隐藏,需要用下面的方法

    <view hidden="{{true}}">
<image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
</view>

微信小程序开发手册的更多相关文章

  1. 微信小程序开发之初探

    本文是以一个简单的小例子,来简要讲解微信小程序开发步骤,希望促进学习分享. 概念 微信小程序,简称小程序,缩写xcx,英文mini program.是一种不需要下载安装即可使用的应用,它实现了应用“触 ...

  2. 微信小程序开发 记录

    采坑了 微信小程序--TabBar不出现的一种原因 学习微信小程序中,遇到底部的TabBar不出现的问题.经过多番尝试,终于解决问题.在此记录问题产生的原因和对策.下面先描述错误现象,接着指出错误原因 ...

  3. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  4. 【微信小程序开发•系列文章六】生命周期和路由

    这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...

  5. 微信小程序开发日记——高仿知乎日报(下)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  6. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  7. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  8. 微信小程序开发工具测评

    1月9日微信小程序正式上线.很多企业都希望能在这个.但是在技术开发的问题上,却不知道该如何下手.经过一些程序员不辞辛苦连夜测试,终于从十余款工具呕心沥血筛选出四款比较靠谱实用的微信小程序开发工具.接下 ...

  9. 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?

    原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复   ...

随机推荐

  1. Html5实现头像上传和编辑,保存为Base64的图片过程

    一.Html5实现头像上传和编辑 插件地址: html5手机端裁剪图片上传头像代码 本地项目引入注意事项: 1.将html的js搬到外面的js文件中,便于管理 2.图片样式在html都是在页面写死,需 ...

  2. 浮点数精确表示,java陷阱

    /** 浮点数表示问题 @author husky */ public class Change { public static void main(String[] args) { double n ...

  3. Linux抓包工具tcpdump详解

    tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpd ...

  4. [转载]ecshop 实现订单导出功能 指定订单导出 EXCEL 数据文件

    当下很多功能都觉得理所当然,但是实际作为2012年停更的ECSHOP来说,很多功能其实都是缺少的,好比今天的要说的功能 订单导出 这个功能对于现在的产品设计来说,应该属于一个比较常规的功能,但是ECS ...

  5. 用汇编语言研究C语言的全局变量、局部变量、参数、返回值放在哪里

    前提知识 c0s调用main函数的地址: 11ah main函数的连接地址: 01fah 一.全局变量与局部变量 测试程序 int a1,a2,a3; void f(void); void g(voi ...

  6. lsmod

    http://blog.csdn.net/yuan892173701/article/details/8960607 抽空写下

  7. java-web-j2e学习建议路线

      JAVA学习之路(2)  首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA).J2SE,Java 2 Platform Standard Edition,我们经常说 ...

  8. Java中间件

    传统的HTML已经满足不了如今web系统的诸多的功能需求,建立一个交互式的Web,便诞生了各种Web开发语言,如ASP,JSP,PHP等,这些语言与传统的语言有着密切的联系,如JSP基于Java语言. ...

  9. uitextfield动态限制输入的字数-b

    1.定义一个事件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...

  10. Oracle问题解决(sqlplus无法登陆)

    命令行 sqlplus 无法登陆,常常是用户名/密码错误.监听配置错误或未启动.数据库服务名丢失等等原因. 用户名/密码错误 找到自己设的密码 这全靠自己创建数据库实例时,备份或记住相关信息 若最后没 ...