微信小程序模版渲染详解


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 相关文章推荐
JavaScript面向对象之体会[总结]
Nov 13 Javascript
自己的js工具 Event封装
Aug 21 Javascript
浅谈javascript的原型继承
Jul 25 Javascript
JS实现程序暂停与继续功能代码解读
Oct 10 Javascript
jQuery中insertBefore()方法用法实例
Jan 08 Javascript
JavaScript变量的作用域全解析
Aug 14 Javascript
JS实现超精简响应鼠标显示二级菜单代码
Sep 12 Javascript
js获取客户端操作系统类型的方法【测试可用】
May 27 Javascript
JS实现动态增加和删除li标签行的实例代码
Oct 16 Javascript
原生JS与jQuery编写简单选项卡
Oct 30 jQuery
JavaScript 下载svg图片为png格式
Jun 21 Javascript
详解JavaScript中typeof与instanceof用法
Oct 24 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自定义函数实现代码
2011/12/30 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
python学习入门细节知识点
2018/03/29 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
如何理解Python中的变量
2020/06/01 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
美国轮胎网站:Priority Tire
2018/11/28 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
教学器材管理制度
2014/01/26 职场文书
2013年军训通讯稿
2014/02/05 职场文书
2014年教务工作总结
2014/12/03 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书