小程序之自定义组件笔记

官方文档戳这里:文档

一、单个与多个slot的使用方法

1.单个使用

<!-- 组件模板 -->
<view class="wrapper">
  <view>这里是组件的内部节点</view>
  <slot></slot>
</view>
<!-- 引用组件的页面模版 -->
<view>
  <component-tag-name>
    <!-- 这部分内容将被放置在组件 <slot> 的位置上 -->
    <view>这里是插入到组件slot中的内容</view>
  </component-tag-name>
</view>

2.多个使用

slot默认使用单个,若要使用多个,要先声明:
//Component.js
Component({
  options: {
    multipleSlots: true // 在组件定义时的选项中启用多slot支持
  }
})
使用name属性来区分slot
<!-- 组件模板 -->
<view class="wrapper">
  <slot name="before"></slot>
  <view>这里是组件的内部细节</view>
  <slot name="after"></slot>
</view>
引用页面用slot属性来选择要注入的slot
<!-- 引用组件的页面模版 -->
<view>
  <component-tag-name>
    <!-- 这部分内容将被放置在组件 <slot name="before"> 的位置上 -->
    <view slot="before">这里是插入到组件slot name="before"中的内容</view>
    <!-- 这部分内容将被放置在组件 <slot name="after"> 的位置上 -->
    <view slot="after">这里是插入到组件slot name="after"中的内容</view>
  </component-tag-name>
</view>
笔记:
  • 页面模板view里面的内容会直接替换组件slot标签里的内容,而不是叠加
  • 一般是用于非组件逻辑的代码块的注入,不用于数据注入。

二、组件样式

1.不能使用的选择器

#a { } /* 在组件中不能使用 */
[a] { } /* 在组件中不能使用 */
button { } /* 在组件中不能使用 */
.a > .b { } /* 除非 .a 是 view 组件节点,否则不一定会生效 */

2.:host指定组件默认样式

/* 组件 custom-component.wxss */
:host {
  color: yellow;
}
笔记:
  • 使用不被允许的选择器会报错哦。
  • 组件内的样式完全独立,不继承全局样式(app.wxss)以及页面样式。所以有用到字体图标需要重新引用

三、属性、数据、方法构造器

1.组件通用属性与方法

通用属性
属性名类型描述
isString组件的文件路径
idString节点id
datasetString节点dataset
dataObject组件数据,包括内部数据和属性值
通用方法
setData
/* setData */
this.setData({
  //需要设置的data
});
hasBehavior
/* hasBehavior */
//检查组件是否具有 behavior (检查时会递归检查被直接或间接引入的所有behavior)
triggerEvent
选项值默认值描述
bubblesfalse事件是否冒泡
composedfalse事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部
capturePhasefalse事件是否拥有捕获阶段
//参数依次为事件名、参数、选项值
this.triggerEvent(action,{},{});
//funName 为组件的触发动作名字,在页面里这样绑定
<component-tag-name bind:action="fun"></component-tag-name>
createSelectorQuery
//大致写法
var query = this.createSelectotQuery();
query.("#id||.class").scrollOffset(function(res){
     //获取到的节点信息
});

query有关的文档戳这:文档

selectComponent&selectAllComponents
//使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象
//使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组
getRelationNodes
//获取所有这个关系对应的所有关联节点(父节点、子节点)

构造器

Component({

  behaviors: [],

  properties: {
    //通常用于接受页面出传过来的值,页面如下
    //<component-tag-name myProperty:"aaa"></component-tag-name>
    //可用setData改变值
    myProperty: { 
      type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
      value: '', // 属性初始值(可选),如果未指定则会根据类型选择一个
      observer: function(newVal, oldVal){} // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:'_propertyChange'
    },
    myProperty2: String // 简化的定义方式
  },
  data: {}, // 私有数据,可用于模版渲染
  // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
  attached: function(){
  //组件生命周期函数,在组件实例进入页面节点树时执行
  },
  moved: function(){
  // 组件生命周期函数,在组件实例被移动到节点树另一个位置时执行
  },
  detached: function(){
  //组件生命周期函数,在组件实例被从页面节点树移除时执行
  },

  methods: {
    //组件的自定义方法写在这里
    onMyButtonTap: function(){
      this.setData({
      })
    }
  }

})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值