微信小程序template模板与component组件的区别和使用详解


Posted in Javascript onMay 22, 2019

前言:

除了component,微信小程序中还有另一种组件化你的方式template模板,这两者之间的区别是,template主要是展示,方法则需要在调用的页面中定义。而component组件则有自己的业务逻辑,可以看做一个独立的page页面。简单来说,如果只是展示,使用template就足够了,如果涉及到的业务逻辑交互比较多,那就最好使用component组件了。

一. template模板:

1. 模板创建:

建议单独创建template目录,在template目录中创建管理模板文件。

由于模板只有wxml、wxss文件,而且小程序开发工具并不支持快速创建模板,因此就需要直接创建wxml、wxss文件了,一个template的模板文件和样式文件只需要命名相同即可。如果模板较多,建议在template目录下再创建子目录,存放单独的模板。

微信小程序template模板与component组件的区别和使用详解

2. 模板文件:

template.wxml文件中能写多个模板,用name区分:

<template name="demo">
<view class='tempDemo'>
 <text class='name'>FirstName: {{firstName}}, LastName: {{lastName}}</text>
 <text class='fr' bindtap="clickMe" data-name="{{'Hello! I am '+firstName+' '+LastName+'!'}}"> clcikMe </text>
</view>
</template>

3. 样式文件:

模板拥有自己的样式文件(用户自定义)。

/* templates/demo/index.wxss */
 .tempDemo{
 width:100%;
 }
 view.tempDemo .name{color:darkorange}

4. 页面引用:

page.wxml

<!--导入模板-->
<import src="../../templates/demo/index.wxml" />
<!--嵌入模板-->
<view>
 <text>嵌入模板</text>
 <template is="demo" data="{{...staffA}}"></template><!--传入参数,必须是对象-->
 <template is="demo" data="{{...staffB}}"></template><!--传入参数,必须是对象-->
 <template is="demo" data="{{...staffC}}"></template><!--传入参数,必须是对象-->
</view>

page.wxss

@import "../../templates/demo/index.wxss" /*引入template样式*/

page.js

Page({
 /**
  * 页面的初始数据
  */
 data: {
  staffA: { firstName: 'Hulk', lastName: 'Hu' },
  staffB: { firstName: 'Shang', lastName: 'You' },
  staffC: { firstName: 'Gideon', lastName: 'Lin' }
 },
 clickMe(e) {
  wx.showToast({ title: e.currentTarget.dataset.name, icon: "none", duration: 100000 })
 }
 ......
})

备注:

一个模板文件中可以有多个template,每个template均需定义name进行区分,页面调用的时候也是以name指向对应的template;

template模板没有配置文件(.json)和业务逻辑文件(.js),所以template模板中的变量引用和业务逻辑事件都需要在引用页面的js文件中进行定义;

template模板支持独立样式,需要在引用页面的样式文件中进行导入;

页面应用template模板需要先导入模板 <import src="../../templates/demo/index.wxml" /> ,然后再嵌入模板<template is="demo" data="{{...staffA}}"></template>

二. Component组件:

1. 组件创建:

新建component目录——创建子目录——新建Component;

微信小程序template模板与component组件的区别和使用详解微信小程序template模板与component组件的区别和使用详解

2. 组件编写:

新建的component组件也由4个文件构成,与page类似,但是js文件和json文件与页面不同。

js代码:

// components/demo/index.js
Component({
 /**
  * 组件的属性列表
  */
 properties: {
  name: {
   type: String,
   value: ''
  }
 },

 /**
  * 组件的初始数据
  */
 data: {
  type: "组件"
 },

 /**
  * 组件的方法列表
  */
 methods: {
  click: function () {
   console.log("component!");
  }
 }
})

json配置文件:

{
  "component": true,
  "usingComponents": {}
}

3. 组件引用:

页面中引用组件需要在json配置文件中进行配置,代码如下:

{
  "navigationBarTitleText": "模板demo",
  "usingComponents": {
   "demo": "../../components/demo/index" 
  }
 }

然后在模板文件中进行使用就可以了,其中name的值为json配置文件中usingComponents的键值:

<demo name="comp" />
<!--使用demo组件,并传入值为“comp”的name属性(参数)-->

这样就可以了。

PS:组件中不会自动引用公共样式,如果需要则需在样式文件中引入:

@import "../../app.wxss";

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

Javascript 相关文章推荐
js操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
改善用户体验的五款jQuery插件分享
May 22 Javascript
JavaScript中的包装对象介绍
Jan 27 Javascript
JS实现为表格动态添加标题的方法
Mar 31 Javascript
浅谈javascript原型链与继承
Jul 13 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 Javascript
canvas学习之API整理笔记(二)
Dec 29 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
Apr 12 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 jQuery
vue 返回上一页,页面样式错乱的解决
Nov 14 Javascript
JavaScript编写开发动态时钟
Jul 29 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
May 22 #Javascript
详解wepy开发小程序踩过的坑(小结)
May 22 #Javascript
vue项目中mock.js的使用及基本用法
May 22 #Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 #Javascript
vue以组件或者插件的形式实现throttle或者debounce
May 22 #Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
May 22 #Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
May 22 #Javascript
You might like
php 全文搜索和替换的实现代码
2008/07/29 PHP
php 无限分类的树类代码
2009/12/03 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
在Django的session中使用User对象的方法
2015/07/23 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
Python线程创建和终止实例代码
2018/01/20 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
影视动画专业个人的自我评价
2013/12/31 职场文书
学校招生宣传广告词
2014/03/19 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
JavaScript设计模式之原型模式详情
2022/06/21 Javascript