微信小程序模版渲染详解


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 相关文章推荐
地址栏上的一段语句,改变页面的风格。(教程)
Apr 02 Javascript
javascript生成随机数的方法
May 16 Javascript
jQuery 选择器详解
Jan 19 Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 Javascript
jQuery实现标题有打字效果的焦点图代码
Nov 16 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
JS中的多态实例详解
Oct 15 Javascript
微信小程序支付之c#后台实现方法
Oct 19 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
Dec 03 Javascript
读懂CommonJS的模块加载
Apr 19 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/07/03 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
window下eclipse安装python插件教程
2017/04/24 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
python实现字符串加密成纯数字
2019/03/19 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
公司会计岗位职责
2014/02/13 职场文书
婚礼主持词
2014/03/13 职场文书
房产公证委托书范本
2014/09/20 职场文书
交通事故被告答辩状
2015/05/22 职场文书
太空授课观后感
2015/06/17 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android