微信小程序模版渲染详解


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 相关文章推荐
不一样的文字闪烁 轮番闪烁
Nov 11 Javascript
红米手机抢购的js代码
Mar 10 Javascript
Javascript基础教程之变量
Jan 18 Javascript
详解JavaScript编程中正则表达式的使用
Oct 25 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
jQuery鼠标事件总结
Oct 13 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
AngularJS 应用模块化的使用
Apr 04 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 jQuery
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
如何在 Vue 中使用 JSX
Feb 14 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
微信小程序如何获取用户信息
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 var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
简化Python的Django框架代码的一些示例
2015/04/20 Python
python编程羊车门问题代码示例
2017/10/25 Python
Python 将pdf转成图片的方法
2018/04/23 Python
python实现词法分析器
2019/01/31 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python字符串格式化输出代码实例
2019/11/22 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
探矿工程师自荐信
2014/01/24 职场文书
企业内控岗位的职责
2014/02/07 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
人力资源求职信
2014/05/25 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
解除劳动合同证明书
2014/09/26 职场文书
教育教学读书笔记
2015/07/02 职场文书
销售会议开幕词
2016/03/04 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
php中pcntl_fork详解
2021/04/01 PHP
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android