详解微信小程序入门五: 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控制显示隐藏兼容问题(IE6、IE7、IE8)
Apr 01 Javascript
javascript学习笔记(八) js内置对象
Jun 19 Javascript
JS隐藏参数post传值实例
Apr 18 Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 Javascript
JS组件Bootstrap实现弹出框效果代码
Apr 26 Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 Javascript
JavaScript基础进阶之数组方法总结(推荐)
Sep 04 Javascript
使用cropper.js裁剪头像的实例代码
Sep 29 Javascript
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 jQuery
Vue 之孙组件向爷组件通信的实现
Apr 23 Javascript
JavaScript变量Dom对象的所有属性
Apr 30 Javascript
原生js实现自定义滚动条
Jan 20 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
php简单获取目录列表的方法
2015/03/24 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
JavaScript 乱码问题
2009/08/06 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
python 接收处理外带的参数方法
2018/12/03 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
金融管理专业毕业生求职信
2014/03/12 职场文书
销售会计岗位职责
2014/03/15 职场文书
合作意向书
2014/07/30 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
初中教师个人工作总结
2015/02/10 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书