微信小程序模版渲染详解


Posted in Javascript onJanuary 26, 2018

微信小程序的界面程序支持html语法,多加了一部分标签,如view、block、templete等。

模版渲染
index.wxml

<view>
 <p>{{helloWord}}</p>
</view>

其中{{}}里面包含的内容你可以理解为一个变量,怎么让程序解析出{{helloWord}}变量

在index.js 中注册这个变量

var json = {
 data:{
  "helloWord" : "hello world"
 }
};

page(json)

然后我们运行小程序,就可以发现显示的就是hello world,即所有的变量都需要包含在注册界面的data中
有的人可能会问,怎么去动态的添加这些变量呢?

var json = {
 data:{
  "helloWorld":""
 },
 //监听页面加载
 onLoad:function(){
  var that = this;
  that.setData({
   "helloWorld":"hello world"
  })
 }
};
page(json)

甚至我们还可以

var json = {
 data:{},
 //监听页面加载
 onLoad:function(){
  var that = this;
  that.setData({
   "helloWorld":"hello world"
  })
 }
};
page(json)

都能实现相同效果,每次调用setData()函数的是够都会重新渲染一次页面。

index1.wxml

<view>
 <view wx:for="{{users}}" wx:for-item="{{item}}">
  <view wx:for="{{item}}" wx:for-index="{{key}}" wx:for-item="{{val}}">
    <p>{{key}}=>{{val}}</p>
  </view>
 </view>
 <view id="nameDemo">
  <p>name : {{users[0].name}}</p>
 </view>
 <view>
  <button bindtap="clickFunc">我是测试按钮</button>
 </view>
</view>

index1.js

var json={
 data:{},
 //监听页面显示
 onShow:function(){
  vat that = this;
  that.setData({
   users:[
    {
     "name":"name1",
     "age":100
    },
    {
     "name":"name2",
     "age":101
    }
   ]
  });
 }
};
page(json);

其中变量that的作用是对this的作用域的一个扩展。
wx:for 循环一个变量
wx:for-index 代表循环的键名
wx:for-item 代表循环的键值
users 在页面显示的时候动态的添加到了data作用域中。

现在我们再来看一个新的问题 如上id=”nameDemo” view中{{users[0].name}} 这个值我们怎么去动态的更改问题
有的可能说直接重新生成一个json直接渲染进去不就行了?
这种方案是可以的,但是要考虑到渲染的性能呀,如果每次调用都重新渲染一次,卡死你。
解决方案就是js的小技巧

只更改{{users[0].name}}的值

var json = {
 data:{},
 //监听页面显示
 onShow:function(){
  vat that = this;
  that.setData({
   users:[
    {
     "name":"name1",
     "age":100
    },
    {
     "name":"name2",
     "age":101
    }
   ]
  });
 },
 clickFunc:function(event){
  vat that = this;
  var dataJson = {};

  dataJson["users[0].name"] = "我是谁"; 
  that.setData(dataJson);
 }
}

其中bindtap 给button对象添加了一个点击事件,点击事件对应的函数是clickFunc 参数event数据结构如下

{ 
  "type": "tap", 
  "timeStamp": 1252, 
  "target": { 
   "id": "tapTest", 
   "offsetLeft": 0, 
   "offsetTop": 0
  }, 
  "currentTarget": { 
   "id": "tapTest", 
   "offsetLeft": 0, 
   "offsetTop": 0, 
   "dataset": { 
   "hi": "MINA" 
   } 
  }, 
  "touches": [{ 
   "pageX": 30, 
   "pageY": 12, 
   "clientX": 30, 
   "clientY": 12, 
   "screenX": 112, 
   "screenY": 151 
  }], 
  "detail": { 
   "x": 30, 
   "y": 12 
  } 
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
json格式的时间显示为正常年月日的方法
Sep 08 Javascript
jQuery中hasClass()方法用法实例
Jan 06 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
Three.js的使用及绘制基础3D图形详解
Apr 27 Javascript
Avalonjs双向数据绑定与监听的实例代码
Jun 23 Javascript
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
完美解决iview 的select下拉框选项错位的问题
Mar 02 Javascript
页面点击小红心js实现代码
May 26 Javascript
解决JavaScript layui 下拉框不显示的问题
Aug 14 Javascript
Vue CLI3中使用compass normalize的方法
May 30 Javascript
JS中准确判断变量类型的方法
Jun 01 Javascript
element tree树形组件回显数据问题解决
Aug 14 Javascript
微信小程序如何获取用户信息
Jan 26 #Javascript
vue实现前进刷新后退不刷新效果
Jan 26 #Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
Jan 26 #Javascript
微信小程序实现图片压缩功能
Jan 26 #Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
Jan 25 #Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
Jan 25 #Javascript
jquery根据name取得select选中的值实例(超简单)
Jan 25 #jQuery
You might like
php数组比较实现查找连续数的方法
2015/07/29 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python入门教程 python入门神图一张
2018/03/05 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
python如何实现异步调用函数执行
2019/07/08 Python
通过Turtle库在Python中绘制一个鼠年福鼠
2020/02/03 Python
python内打印变量之%和f的实例
2020/02/19 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
宪法宣传周工作方案
2014/05/26 职场文书
生日宴会策划方案
2014/06/03 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
遗失说明具结保证书
2015/02/26 职场文书
导游词之吉林花园山
2019/10/17 职场文书
古诗之感恩老师
2019/10/24 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android