小程序提供了组件component和模版template那什么时候 选择哪一个使用呢?我总结了一下

template主要是模版,对于重复的展示型模块进行展示,其中调用的方法或者数据data都是需要引用页面进行定义

component组件,相对于template更完整,接近于一个独立的模块,有自己的逻辑方法,数据,属性,可以提供外部引用页面使用方法进行交互;

所以 涉及到业务逻辑交互多的重复模块 使用组件component更合适一些,如果仅仅是展示性性 用template即可

使用:

组件component:

1.创建组件目录

因为组件不是真正的wxml,所以不再page 里面 需要单独创建一个目录

之后结构形式 和 wxml相同 均为四个文件,这里有一个注意点,这里创建的是组件 需要在json文件中进行配置  更多的注意细节可以看官网api

{
"component": true
}

2.主要的逻辑都集中在js中,这是我的关于各种协议的一个组件的js

const app = getApp()
Component({
/**
* 组件的属性列表
*/
properties: { //定义组件属性
agreement: { //用来显示提示信息
type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
value: '协议名称' // 属性初始值(可选),如果未指定则会根据类型选择一个
},
agreementCont: {
type: String,
value: ''
},
//z这个图标 和下面 的baseRes效果是一样的 是一个静态资源的路径获取,对于公共常量 如何引入到组件的中第一种方法
iconRes: { //图标类型
type: String,
value: app.config.BASE_RESOURCE
}
},
/**
* 组件的初始数据
*/
data: {
isShow: false
},
/**
* 组件的方法列表
*/
ready: function () {
//这里是第二种方法 对于取公共数据globalData的一种方法 需要在ready中调用,直接写在data中并不生效
this.setData({
baseRes: app.globalData.baseRes
})
}, methods: {
close: function () {
this.setData({
isShow: false
})
},
show: function (tit, txt) {
this.setData({
isShow: true,
agreementCont: txt,
agreement: tit
})
}
}
})

wxml:

<view class="agree-box" wx:if="{{isShow}}">
<view class="agree-cont">
<view class="agree-txt">
<view class="agreement">{{agreement}}</view>
<scroll-view scroll-y="true" class='agreementCont'>
<text class="agreementCont-txt">{{agreementCont}}</text>
</scroll-view>
</view>
//这里的iconRes 或者 baseRes 均可以获取到
<image src="{{iconRes}}argee-close.png" class="close" bindtap='close'></image>
</view>
</view>   

一个基础设置

const config = require('./utils/config.js')  //这是一个公共常量的配置文件
const service = require('./utils/service.js')
const onfire = require("./utils/onfire.js")
import mini from './utils/mini.js'
const util = require("./utils/util.js") App({
api: service,
mini: mini,
util: util,
onfire: onfire,
config: config,
globalData: {
baseRes: config.BASE_RESOURCE,
windowHeight: null
},
onLaunch: function () {
var that = this;
//that.test();
that.getWindowHeight(); //获取屏幕高度
that.bindNetworkChange();
this.getToken();
}
})

3.调用组件

引用的wxml中 此处的命名agree 标签 和 app.json中的配置有关 ( id 与 js中相同 方便获取组件 )

<agree id="agree"></agree>

app.json

"usingComponents": {
"toast": "./components/toast",
"agree": "./components/agree"
},

引用组件的js中

在ready中 将组件声明
onReady: function () {
this.toast = this.selectComponent("#toast");
this.agree = this.selectComponent("#agree");
},

调用组件的的事件

showAgree: function () {
var that = this;
if (that.data.applyData.serviceNetworkId) {
满足条件后 请求接口 获取 组件需要的数据 调用组件方法 将所需要的参数 传入 调用组件内某些方法
app.api.applyAgreement({
"serviceNetworkId": that.data.applyData.serviceNetworkId
}).then(res => {
if (res) {
//这里的 agree 是在ready中声明的
that.agree.show('会员卡申请协议', res.constitutionInfoText); } else {
that.agree.show('申请协议', '暂无内容');
}
})
} else {
that.toast.showToast('请选择4S店', true);
} }

  这样一个简单的组件就完成了

模版template

这里说一个数据为空时候的统一展示template

1.创建一个template文件夹,这里创建文件 在page中即可,也是四个文件(不过我试验了一下 只有 wxml和wxss 有用,js中的数据获取没有用,所以只能依靠调用的时候将数据传入)

之后noData.wxml中 命名为noData的template 模版

template.wxml文件中能写多个模板,用name区分,页面调用的时候也是以name指向对应的template块

里面有两个变量 baseRes和noDataMsg  在调用的noData这个template进行传参展示

<template name="noData">
<view class="nodata-cont">
<image src="{{baseRes}}nodata-public.png" class="nodata-img"></image>
<text class="nodata-txt">{{noDataMsg}}</text>
</view>
</template>

调用noData的wxml

这里的 is="这个是template的name" data是该页面中数据 作为参数传入,作为template中的数据展示

<import src="../template/noData.wxml" />
....
<template wx:else is="noData" data="{{baseRes,noDataMsg}}"></template>

wxss

@import "./pages/template/noData.wxss"

引用noData的js,将需要的变量 声明在data中

data: {
baseRes: app.globalData.baseRes,
noDataMsg: '您目前还没有积分'
}

这样 一个简单的模版 就做好了

  

小程序-组件component和模版template的选择和使用的更多相关文章

  1. 小程序 组件 Component

    一.组件模板和样式 类似于页面,自定义组件拥有自己的 wxml 和模板 wxss 样式. 1.组件模板 组件的写法和页面的写法相同,组件模板与组件数据结合后生成的数节点, 将被插入到组件的引用位置.在 ...

  2. selectComponent是ok的,小程序组件 component方式,让子页面重绘

    this.selectComponent('#news').init(); 其中news是父级xml文件引用子组件的时给子组件的id. 当父级传给子级的数据有变化时,需要子页面重绘,所以就用上面那行代 ...

  3. 小程序组件化框架 WePY 在性能调优上做出的探究

    作者:龚澄 导语 性能调优是一个亘古不变的话题,无论是在传统H5上还是小程序中.因为实现机制不同,可能导致传统H5中的某些优化方式在小程序上并不适用.因此必须另开辟蹊径找出适合小程序的调估方式. 本文 ...

  4. WePY | 小程序组件化开发框架

    资源连接: WePY | 小程序组件化开发框架 WePYAWESOME 微信小程序wepy开发资源汇总 文档 GITHUB weui WebStorm/PhpStorm 配置识别 *.wpy 文件代码 ...

  5. 微信小程序-组件篇

    一.摘要 组件是小程序整个语法中占比比较大的一部分,没写过组件可以说只懂了半个小程序.组件提供了类似页面的生命周期与逻辑.相比于模板,组件能实现的功能更加全面,也更为强大.通过slot可以自由扩展组件 ...

  6. 小程序组件--> 组件传参

    小程序组件,在components文件夹右击-->创建文件夹-->右击-->新建component即可 创建一个组件 如果多个地方需要使用到,可以在app.json中加入一下代码,相 ...

  7. 微信小程序组件设计规范

    微信小程序组件设计规范 组件化开发的思想贯穿着我开发设计过程的始终.在过去很长一段时间里,我都受益于这种思想. 组件可复用 - 减少了重复代码量 组件做为抽离的功能单元 - 方便维护 组件作为temp ...

  8. 微信小程序(组件demo)以及预览方法:(小程序交流群:604788754)

    1. 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的"设置"-"开发者设置"中,查看到微信小程序的 Ap ...

  9. 小程序组件 scroll-view 滑动

    小程序组件 scroll-view 中分别有上下竖向滑动和左右横向滑动之分,在这次项目中刚好需要用到横向滑动,但在测试过程中发现横向滑动没有了效果(静止在那里没移动过),经调试发现: 1.scroll ...

随机推荐

  1. vue+axios实现文件下载

    功能:点击导出按钮,提交请求,下载excel文件: 第一步:跟后端童鞋确认交付的接口的response header设置了 axios({ method: 'post', url: 'api/user ...

  2. python3.x执行post请求时报错“POST data should be bytes or an iterable of bytes...”的解决方法

    使用python3.5.1执行post请求时,一直报错"POST data should be bytes or an iterable of bytes. It cannot be of ...

  3. python解决上楼梯问题

    假设一段楼梯共n(n>1)个台阶,小朋友一步最多能上3个台阶,那么小朋友上这段楼梯一共有多少种方法 (此为京东2016年笔试题目) 假设n为15,从第15个台阶上往回看,有3种方法可以上来(从第 ...

  4. Tomcat系列(7)——Tomcat类加载机制

    1. 核心部分 1. 类加载器: 通过一个类的全限定名来获取描述此类的二进制字节流. 对于任意一个类,都需要由加载他的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一 ...

  5. Hadoop记录-切换NN

    一.第一种方法 重启namenode(1.1.1.1 1.1.1.2)重启standby节点:1.1hadoop-daemon.sh stop zkfchadoop-daemon.sh stop na ...

  6. CMake快速入门

    参考: https://www.hahack.com/codes/cmake/ 1. 单目标文件 main.c #include <stdio.h> #include <stdlib ...

  7. fatal error: Eigen3/Core: 没有那个文件或目录

    解决方法: 在CMakeLists.txt文件里添加: include_directories("/usr/include/eigen3")

  8. vue keep-alive内置缓存组件

    1.当组件在keep-alive被切换时将会执行activeted和deactiveted两个生命周期 2.inlude 正则表达式或字符串 ,只有符合条件的组件会被缓存 exclude正则表达式或字 ...

  9. linux 性能分析

    1.系统状态工具:sysstat, 包含很多监控linux系统状态的工具,pidstat 安装方法: sudo apt-get install sysstat 2.性能优化工具: perf 安装方法: ...

  10. 前端使用pdf.js预览pdf文件

    现在的浏览器基本都支持直接把pdf文件拖到浏览器就可以打开了,不用安装额外的插件.但是不同的浏览器显示的页面不一样.如果我们想在网页上统一预览pdf怎样实现呢? Mozilla开源了一个插件pdf.j ...