微信小程序模版渲染详解


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 相关文章推荐
prototype.js的Ajax对象
Sep 23 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
Sep 09 Javascript
js数组去重的常用方法总结
Jan 24 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
jQuery获取iframe的document对象的方法
Oct 10 Javascript
jQuery多个input求和的实现方法
Feb 12 Javascript
jQuery倒计时代码(超简单)
Feb 27 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
Apr 13 Javascript
浅谈微信小程序flex布局基础
Sep 10 Javascript
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 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 goto语句简介和使用实例
2014/03/11 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
javascript 动态添加事件代码
2008/11/30 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
中餐厅主管的职责范文
2014/02/04 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
交通事故委托书范本
2014/09/28 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python