详解微信小程序入门五: wxml文件引用、模版、生命周期


Posted in Javascript onJanuary 20, 2017

实例一: include方式引用header.wxml文件

文件引用对于代码的重用非常重要,例如在web开发中我们可以将公用的header部分和footer等部分进行提取,然后在需要的地方进行引用。

微信小程序里面,是包含引用功能的——include、import。这两个引用文件的标签,使用基本差不多,这里先说一下include。

微信中的视图文件引用,引用过来的都是没有渲染的,基本类似于直接将引用过来的文件复制到引用位置,所以我们需要重新对其渲染。

实例说明

这里将默认创建的用户头像信息提取出到header.wxml中,做为头部引用,分别由index2.wxml和index3.wxml引用,引用方式为include。

实例代码

在pages中创建common/header.wxml

从index.wxml中将系统默认创建的用户信息结构复制到header.wxml中。

header.wxml代码:

<!--pages/common/header.wxml-->
 <view bindtap="bindViewTap" class="userinfo">
  <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
  <text class="userinfo-nickname">{{userInfo.nickName}}</text>
 </view>

因为两个页面都要包含header.wxml,所以样式文件就不重复写了,这里直接将样式拷贝到app.wxss。

app.wxss代码:

/**app.wxss**/
.userinfo {
 display: flex;
 flex-direction: column;
 align-items: center;
}

.userinfo-avatar {
 width: 128rpx;
 height: 128rpx;
 margin: 20rpx;
 border-radius: 50%;
}

.userinfo-nickname {
 color: #aaa;
}

创建index/index2和index/index3

详解微信小程序入门五: wxml文件引用、模版、生命周期

index2.wxml内容:

<!--pages/index/index2.wxml-->
<view class="container">
  <include src="../common/header.wxml" />

  <view class="myBtn">
    <button type="primary" bindtap="goIndex3">进入index3</button>
  </view>  
</view>

因为index2.wxml和index3.wxml都需要userInfo数据,所以这边在index2获取到数据后,使用本地存储进行存储,index3.wxml读取本地存储。

index2.js代码:

// pages/index/index2.js
var app = getApp()

Page({
 data: {
  userInfo: {},
 },

 goIndex3:function(){
  wx.navigateTo({
   url: 'index3'
  })
 },

 onLoad: function () {
  console.log('onLoad')
  var that = this
  app.getUserInfo(function (userInfo) {
   that.setData({
    userInfo: userInfo
   })

   //本地存储
   wx.setStorageSync('userInfo', userInfo)
  })
 }
})

index3.wxml代码:

<!--pages/index/index3.wxml-->

<view class="container">
  <include src="../common/header.wxml" />

  <text>pages/index/index3.wxml</text>
</view>

index3.js代码:

// pages/index/index3.js
Page({
 data:{
  userInfo: {},
 },
 onLoad:function(options){  
  this.setData({
   userInfo: wx.getStorageSync('userInfo')
  })
 },
})

实例效果

 详解微信小程序入门五: wxml文件引用、模版、生命周期

实例二: import方式引用footer.wxml文件

这个实例使用import来引用文件,import比include要强大的多,待会我再对于这两都进行一下对比。

import引用方式涉及到了微信的模版(template),这里先说一下template。

微信视图模版(template)

template也是写在.wxml中,然后使用<template>...</template>标记指定模版信息,模版下定义:

<template name="msgItem">
  视图代码...
</template>

使用name属性,作为模板的名字。

使用模版:

<template is="msgItem" data="{{...item}}"/>

data为向模版传入的数据。

实例说明

使用模版的方式创建footer视图代码片,然后用import和template进行代码的调用。

实例代码

创建footer.wxml

详解微信小程序入门五: wxml文件引用、模版、生命周期 

footer.wxml代码:

详解微信小程序入门五: wxml文件引用、模版、生命周期 

index2.wxml代码:

详解微信小程序入门五: wxml文件引用、模版、生命周期 

实例效果

详解微信小程序入门五: wxml文件引用、模版、生命周期 

实例三: 小程序退出时清除本地数据

这里涉及到了小程序的生命周期问题,可以类比一下安卓生命周期,小程序的生命周期在app.js中进行定义:

属性 类型 描述 触发时机
onLaunch Function 生命周期函数?监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
onShow Function 生命周期函数?监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow
onHide Function 生命周期函数?监听小程序隐藏 当小程序从前台进入后台,会触发 onHide
onError Function 错误监听函数 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息

page生命周期:

属性 类型 描述
onLoad Function 生命周期函数?监听页面加载
onReady Function 生命周期函数?监听页面初次渲染完成
onShow Function 生命周期函数?监听页面显示
onHide Function 生命周期函数?监听页面隐藏
onUnload Function 生命周期函数?监听页面卸载

详解微信小程序入门五: wxml文件引用、模版、生命周期

这里用到了onUnload事件。

index2.js代码:

详解微信小程序入门五: wxml文件引用、模版、生命周期 

include 与 import

import可以在该文件中使用目标文件定义的template

include可以将目标文件除了<template/>的整个代码引入,相当于是拷贝到include位置

import的作用域

import有作用域的概念,即只会import目标文件中定义的template,而不会import目标文件import的template。

如:C import B,B import A,在C中可以使用B定义的template,在B中可以使用A定义的template,但是C不能使用A定义的template

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 美元符冲突的解决方法
Mar 28 Javascript
JavaScript EasyPager 分页函数
May 25 Javascript
jquery自定义属性(类型/属性值)
May 21 Javascript
深入理解javascript动态插入技术
Nov 12 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
Oct 29 Javascript
js获取当前日期时间及其它日期操作汇总
Mar 08 Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 Javascript
基于jQuery的select下拉框选择触发事件实例分析
Nov 18 Javascript
JavaScript表单验证开发
Nov 23 Javascript
vue使用stompjs实现mqtt消息推送通知
Jun 22 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
Dec 31 Javascript
浅谈Webpack打包优化技巧
Jun 12 Javascript
浅谈JavaScript异步编程
Jan 20 #Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
Jan 20 #Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
Jan 19 #Javascript
BootStrap组件之进度条的基本用法
Jan 19 #Javascript
微信小程序 页面跳转和数据传递实例详解
Jan 19 #Javascript
js实现符合国情的日期插件详解
Jan 19 #Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 #Javascript
You might like
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
详解javascript遍历方式
2015/11/11 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
下载官网python并安装的步骤详解
2019/10/12 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
Servlet面试题库
2015/07/18 面试题
服务承诺书格式
2014/05/21 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书