学习小程序--自定义组件

组件模板和样式

组件模板
  • 模板数据绑定,向子组件传值
  • <slot> 节点,单个slot
  • 多个slot
组件样式
  • 组件和引用组件的页面,使用class选择器,不能使用id/属性/标签选择器
  • 组件和页面,使用后代选择器(.a .b)在一些极端情况下会有非预期的表现
  • 继承样式,如 font 、 color ,会从组件外继承到组件内。
  • 除继承样式外, app.wxss 中的样式、组件所在页面的的样式对自定义组件无效
组件样式隔离
  • 隔离选项 styleIsolation
  • isolated 隔离
  • apply-shared 页面影响组件
  • shared 页面组件相互影响
外部样式类
  • externalClasses
引用引用页面或父组件的样式
  • 即使启用了样式隔离 isolated ,组件仍然可以在局部引用组件所在页面的样式或父组件的样式
  • 在页面中引用组件,使用~
  • 在组件中引用组件,使用^
  • 注意:如果组件是比较独立、通用的组件,请优先使用外部样式类的方式
虚拟化组件节点
  • 希望自定义组件内部的第一层节点能够响应 flex 布局或者样式由自定义组件本身完全决定
  • virtualHost: true

Component 构造器

构造组件
构造页面
  • 使用 Component 构造器来构造页面的一个好处是可以使用 behaviors 来提取所有页面中公用的代码段

组件间通信与事件

组件间通信
  • WXML 数据绑定:用于父组件向子组件的指定属性设置数据
  • 事件:用于子组件向父组件传递数据,可以传递任意数据
  • 通过 this.selectComponent 方法获取子组件实例对象,可以直接访问组件的任意数据和方法
监听事件
  • 自定义组件可以触发任意的事件,引用组件的页面可以监听这些事件
 <component-tag-name bindmyevent="onMyEvent" />
触发事件
  • 自定义组件触发事件时,需要使用 triggerEvent 方法,指定事件名、detail对象和事
    件选项
 this.triggerEvent('myevent', myEventDetail, myEventOption)
  • 触发事件的选项包括:bubbles,composed,capturePhase
获取组件实例
  • 可在父组件里调用 this.selectComponent ,获取子组件的实例对象
const child = this.selectComponent('.my-component')
  • 父组件将会获取 class 为 my-component 的子组件实例对象,即子组件的 this
  • 若需要自定义 selectComponent 返回的数据,可使用内置 behavior: wx://component-export
Component({
  behaviors: ['wx://component-export'],
  export() {
    return { myField: 'myValue' }
  }
})

组件生命周期

组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。
其中,最重要的生命周期是 created attached detached

定义组件生命周期
  • 生命周期方法可以直接定义在 Component 构造器的第一级参数中。
  • 组件的的生命周期也可以在 lifetimes 字段内进行声明(这是推荐的方式,其优先级最高)。
  • 可用的全部生命周期 created attached ready moved detached error
组件所在页面的生命周期
  • pageLifetimes 定义段中定义。其中可用的生命周期包括 show hide resize

behaviors

组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用

组件中使用
var myBehavior = require('my-behavior')
Component({
  behaviors: [myBehavior],
  properties: {
    myProperty: {
      type: String
    }
同名字段的覆盖和组合规则
  • 后执行覆盖先执行
  • 生命周期函数不会相互覆盖,而是在对应触发时机被逐个调用,如果同一个 behavior 被一个组件多次引用,它定义的生命周期函数只会被执行一次
内置 behaviors

组件间的关系 relations

数据监听器

  • 数据监听器监听的是 setData 涉及到的数据字段,即使这些数据字段的值没有发生变化,数据监听器依然会被触发
  • 如果在数据监听器函数中使用 setData 设置本身监听的数据字段,可能会导致死循环
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354