微信小程序模版渲染详解


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 09 Javascript
2010年最佳jQuery插件整理
Dec 06 Javascript
javascript控制swfObject应用介绍
Nov 29 Javascript
JavaScript中setAttribute用法介绍
Jul 20 Javascript
jquery简单实现鼠标经过导航条改变背景图
Dec 17 Javascript
jQuery实现带动画效果的二级下拉导航方法
Mar 11 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
js点击任意区域弹出层消失实现代码
Dec 27 Javascript
vue select选择框数据变化监听方法
Aug 24 Javascript
解决vuecli3中img src 的引入问题
Aug 04 Javascript
在项目vue中使用echarts的操作步骤
Sep 07 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使用者状态管理功能的应用
2006/10/09 PHP
我的论坛源代码(十)
2006/10/09 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
javascript date格式化示例
2013/09/25 Javascript
JavaScript DOM基础
2015/04/13 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
vue项目实战总结篇
2018/02/11 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
python清除字符串中间空格的实例讲解
2018/05/11 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
浅谈python锁与死锁问题
2020/08/14 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
为什么要使用servlet
2016/01/17 面试题
电子商务专业学生的学习自我评价
2013/10/27 职场文书
低碳环保标语
2014/06/12 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
公司的力量观后感
2015/06/05 职场文书