详解微信小程序入门五: 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 相关文章推荐
用js自动判断浏览器分辨率的代码
Jan 28 Javascript
js小技巧--自动隐藏红叉叉
Aug 13 Javascript
解决jquery异步按一定的时间间隔刷新问题
Dec 10 Javascript
JavaScript动态创建div属性和样式示例代码
Oct 09 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
详解VUE 定义全局变量的几种实现方式
Jun 01 Javascript
json对象及数组键值的深度大小写转换问题详解
Mar 30 Javascript
Node.js中你不可不精的Stream(流)
Jun 08 Javascript
Vue实现6位数密码效果
Aug 18 Javascript
在博客园博文中添加自定义右键菜单的方法详解
Feb 05 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 Javascript
JavaScript 对象创建的3种方法
Nov 17 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
PHP4实际应用经验篇(7)
2006/10/09 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
PHP静态成员变量
2017/02/14 PHP
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
python爬取微信公众号文章
2018/08/31 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
np.random.seed() 的使用详解
2020/01/14 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
会话Bean的种类
2013/11/07 面试题
菜篮子工程实施方案
2014/03/08 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
排查整治工作方案
2014/06/09 职场文书
企业管理标语
2014/06/10 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
还款承诺书范本
2015/01/20 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
Python实现自动玩连连看的脚本分享
2022/04/04 Python