首页 > 编程语言 >小程序自定义组件和 npm包的使用

小程序自定义组件和 npm包的使用

时间:2022-12-11 18:22:43浏览次数:54  
标签:npm 自定义 Component behavior 组件 properties 属性

自定义组件

创建自定义组件

在根目录下创建 components 文件夹 下创建自定义的组件

引用自定义组件

// 在页面的 .json 文件中,引入组件
{
    "usingComponents": {
        "my-test1": "/components/test1/test1"
    }
}
​
// 在页面的 .wxml 文件中,使用组件
<my-test1></mytest1>

组件和页面的区别

  • 组件中的 .json 文件中需要声明 “component”:true 属性

  • 组件的 .js 文件中调用的是 Component() 函数

  • 组件的事件处理函数需要定义到 methods 节点中

组件样式隔离

组件的样式不会影响组件之外的样式

注意:

  • app.wxss 定义的样式对组件样式无效

  • 只有 class 选择器会有样式隔离效果,id 选择器、属性选择器、标签选择器不受样式隔离的影响

建议:在组件和引用组件的页面中建议使用 class 选择器,不要使用 id、属性、标签选择器!

修改组件的样式隔离选项

通过 styleIsolation 修改组件的样式隔离选项

// 在组件的 .js 文件中新增如下配置
Component({
    options:{
        styleIsolation: 'isolated'
    }
})
// 或在组件的 .json 文件中新增配置如下
{
    "styleIsolation": "isolated"
}

自定义组件的方法

自定义方法建议以 _ 开头

properties 属性

是组件的对外属性,用来接收外界传递到组件中的数据。

Component({
    // 属性定义
    properties: {
       max: {				// 完整定义属性的方式【当需要指定属性默认值时,建议使用此方式】
           type: Number,	// 属性值的数据类型
           value: 10		// 属性默认值
       },
       max: Number			// 简化定义属性的方式【不需要指定属性默认值时,可以使用简化方式】
    }
})

<my-test1 max="10"></my-test1>

data 和 properties 的区别

都是可读可写的。

  • data 更倾向于存储组件的私有数据

  • properties 更倾向于存储外界传递到组件中的数据

使用 setData 修改 properties 的值

Component({
    properties: { max: Number },	// 定义属性
    methods: {
        addCount(){
			this.setData({ max: this.properties.max + 1 }) // 使用 setData 修改属性的值
        }
    }
})

数据监听器

类似于 vue 中的数据监听器

Component({
    observers: {
        '字段A, 字段B': function(字段A的新值, 字段B的新值){
            // do something
        }
    }
})

Component({
    observers: {
        'rgb.**': function(obj){
            this.setData({
                fullColor: `${obj.r}, ${obj.g}, ${obj.b}`
            })
        }
    }
})

纯数据字段

指定 pureDataPattern 为一个正则表达式,字段名符合这个正则表达式的字段将成为纯数据字段。

Component({
   options: {
       // 指定所有 _ 开头的数据字段为纯数据字段
       pureDataPattern: /^_/
   },
   data: {
       a: true, // 普通字段
       _b: true, // 纯数据字段
   }
}

组件的生命周期

createdattached 、ready 、moved 、detached 、 error

created :不能调用 setData;通常在这个生命周期函数中,只用于给组件的 this 添加一些自定义的属性字段。

attached:this.data 此时已初始化完毕;初始化的工作可以在这里进行(例如发请求获取初始数据)

detached:退出一个页面时,会触发页面内每个自定义组件的 detached 生命周期函数;此时适合做一些清理性质的工作

lifetimes节点

Component({
    lifetimes: {
        created(){
      		// do something
  		},
        attached(){
    		
		}
	}
}

组件所在页面的生命周期函数

show \ hide \ resize

pageLifetimes 节点

Component({
    pageLifetimes: {
        show: function(){}, // 页面被展示时
        hide: function(){}, // 页面被隐藏时
        resize: function(){} // 页面尺寸发生变化时
	}
}

 

自定义组件的插槽

<slot> 插槽,占位符

单个插槽

在小程序中,默认每个自定义组件中只允许使用一个 <slot> 插槽

// 组件的封装者
<view>
	<view>这里是组件的内部节点</view>    
	// 对于不确定的内容,可以使用 插槽 占位,具体内容由组件的使用者决定
	<slot></slot>
</view>

<component-tag-name>
    // 这部分内容将放置在组件 插槽 的位置上
    <view>这里是插入到组件slot中的内容</view>
</component-tag-name>

多个插槽

Component({
	options: {
        mulitipSlots: true // 在组件定义时的选项中启用多 slot 支持
    },
})
// 组件的封装者
<view>
	<view>这里是组件的内部节点</view>    
	// 对于不确定的内容,可以使用 插槽 占位,具体内容由组件的使用者决定
	<slot name="before"></slot>
	<slot name="after"></slot>
</view>

<component-tag-name>
    // 这部分内容将放置在组件 插槽 的位置上
    <view slot="before">这里是插入到组件slot中的内容</view>
    <view slot="after">这里是插入到组件slot中的内容</view>
</component-tag-name>

组件通信

父子组件通信

  1. 属性绑定

    • 用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容

  2. 事件绑定

    • 用于子组件向父组件传递数据,可以传递任意数据

      • 在父组件的 js 中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件

      • 在父组件的 wxml 中,通过自定义事件的形式,将

        标签:npm,自定义,Component,behavior,组件,properties,属性
        From: https://www.cnblogs.com/c0lmd0wn/p/16974084.html

相关文章

  • 组件传值
    父传子:通过props传递,父组件定义自定义属性并传入要传的值,子组件通过props接受自定义属性并且使用。子传父:子组件通过this.$emit触发自定义事件并且传入要传的值,父组件通过......
  • Compose把Text组件玩出新高度
    本文首发于稀土掘金https://juejin.cn/post/7140529542665338910一、前言开始前,建议大家可以去先看一下我们的这一篇文章==→Compose挑灯夜看-照亮手机屏幕里面的书......
  • #yyds干货盘点# react笔记之学习之使用组件完成练习
     我是歌谣放弃很容易但是坚持一定很酷日期部分data.jsimportReactfrom'react';import'./MyDate.css';constMyDate=()=>{return(<divclassName="d......
  • Vue组件间传值(爷传孙,孙传爷)
    爷传孙首先说明:既然你学会了父传子,那么爷传孙自然不是难事,你可以先父传子,再子传孙,一步一步传,这里不再赘述。这里用到的方法是$attrs传参,比起上面的更简洁一些,首先我们还是......
  • 【ASP.NET Core】MVC控制器的各种自定义:IActionHttpMethodProvider 接口
    IActionHttpMethodProvider接口的结构很简单,实现该接口只要实现一个属性即可——HttpMethods。该属性是一个字符串序列。这啥意思呢?这个字符串序列代表的就是受支持的HT......
  • Vue3学习笔记(四)——组件、生命周期、Hook
    一、组件如果我们将一个页面中所有的处理逻辑全部放在一起,处理起来就会变得非常复杂,而且不利于后续的管理以及扩展,但如果,我们将一个页面拆分成一个个小的功能块,每个功能块完......
  • springboot启动读取配置文件过程&自定义配置文件处理器
        最近看到看到spring的配置文件放在了resources/config/application.yal文件内部,第一次见。就想的研究下,springboot启动读取配置文件的过程。1.启动过程org.sp......
  • [Vue3-14]父子组件数据传递
    1.父组件传递子组件2.子组件传递父组件......
  • Python如何导入自定义模块?
    在C语言里为了工程文件的主程序main代码简洁的效果,我们经常用include“XXX”的来导入其.h文件在Python里Import自己的自定义模块需要注意几个坑以main主函数和需要导入的......
  • 图文解说ChinaCock FMX组件CCListBox
    随着Delphi11发版以来,其ListBox的效率已经不可同日而语,再加之Skia的支持,使用ListBox显示大量数据,效率已经不问题。在此情况下,ChinaCock作者继承ListBox,为我们封装了新的组......