详解微信小程序入门五: 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 浮动导航栏实现代码
Aug 27 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
js过滤数组重复元素的方法
Sep 05 Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 Javascript
jquery增加和删除元素的方法
Jan 14 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
Oct 25 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
Feb 11 Javascript
element-ui 关于获取select 的label值方法
Aug 24 Javascript
Vue创建头部组件示例代码详解
Oct 23 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
Apr 29 Javascript
Vue-CLI 项目在pycharm中配置方法
Aug 30 Javascript
JavaScript页面加载事件实例讲解
Sep 01 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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
php 文件上传类代码
2011/08/06 PHP
php class类的用法详细总结
2013/10/17 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
Prototype String对象 学习
2009/07/19 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
2014年实验室工作总结
2014/12/03 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
nginx搭建NFS网络文件系统
2022/04/14 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers