• 微信小程序组件与组件之间的通讯


    创建组件:

    在项目根目录创建一个名为components 的文件夹,在文件夹中创建一个以组件名命名的子文件夹,在子文件夹上右键点击选择创建component 这时会在子文件夹内生成4个基础文件。

    引用组件:

    1.在需要引用组件的页面中,找到页面的.json 配置文件,新增usingComponents 节点

    2.在usingComponents 中,通过键值对的形式,注册组件,键为注册的组件名称,值为组件的相对引用路径。

    3.在页面的.wxml 文件中,把注册的组件名称,以标签形式在页面上使用,即可把组件展示在页面上。

    注意: 注册组件名称的时候,建议把名称注册为以短横线链接的形式,例如: vant-button 或custom-button 

    1
    2
    3
    4
    5
    6
    7
    {
      "usingComponents": {
        "test-com": "../../components/test/test"
      }
    }
     
    <test-com></test-com>

    使用样式美化组件:

    组件对应wxss文件,只对组件内的节点生效,编写组件需注意:

    1.组件和引用组件的页面不能使用id选择器,属性选择器[a]和标签名选择器,需该用class类选择器。

    2.组件和引用组件的页面中使用后台选择器(.a b) 在一些极端情况下会有非预期的表现。如遇,请避免。

    3.子元素选择器(.a>b) 只能用于view组件遇其子节点,用于其他组件可能导致非预期情况。

    4.继承样式,如font, color,会从组件外继承到组件内。

    5.出继承样式外,app.wxss 中的样式,组件所在页面的样式对对自定义组件无效。


    组件的data与methods

    使用data定义组件的私有数据:

    小程序组件中的data,和小程序页面中的data用法一致,只不过

    1.页面的data定义在Page()函数中

    2.组件的data定义在Component() 函数中

    在组件的js文件中:

    1.如果要访问data中的数据,直接使用this.data 数据名称即可。

    2.如果要为data中的数据重新赋值,调用this.setData(数据名称,新值) 即可

    在组件的.wxml 文件中:

    如果要渲染data中的数据,直接使用{{数据名称}} 即可。

    使用methods定义组件的事件处理函数:

    和页面不同,组件的事件处理函数,必须定义在methods节点中,示例代码如下:

    1
    2
    3
    4
    5
    methods: {
      btnHandle: function () {
        console.log('test')
      }
    }

    组件的properties

    1.properties 的作用

    类似于vue组件中的props,小程序组件中的properties是组件对外的属性,用来接收外界传递到组件中的数据。

    在小程序中,组件的proerties和data的用法类似,他们都是可读可写的只不过:

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

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

    声明properties的两种方式:

    Component({

      properties: {

      msg: "hello word"
      }

    })

    Component({

      properties: {

      msg:{

           type: string,

       value:  "hello word"

         }
      }

    })

    为组件传递properties 的值:

    可以使用数据绑定的形式,向子组件的属性传递动态数据,示例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 父组件
    <view>
      <test-com prop-a="data12312312" prop-b="{{abc}}">
      </test-com>
    </view>
     
     
    // 子组件
     properties: {
          propA: String
      }
     
    <view>{{propA}}</view>

    组件中修改properties 的值:

    小程序中,properties的值是可读可写的,他的用法与data一致,可以通过setData 修改properties 中的值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    properties: {
          propA: String
      },
     
     
      methods: {
        btnHandle: function () {
          this.setData({
            propA : "abc123"
          })
        }
      }

    数据监听器:

    数据监听器可以用于监听和响应任何属性和数据字段的变化,从而执行特定的操作,作用类似于vue中的wacth

    数据监听器从小程序基础库版本2.61开始支持

    监听器的基本语法如下:

    1
    2
    3
    4
    5
    observers: {
       "字段A,字段B": function (字段A新值, 字段B新值) {
         do something
       }
     },

    组件的生命周期:

    组件的生命周期,指的是组件滋生的一些函数,这些函数在特殊时间点或遇到一些特殊的框架事件时被自动触发。

    其中,最重要的生命周期是, created, attached, detached 包含一个组件实例生命流程的最主要时间点。

    +组件实例刚刚被创建好时: created 生命周期被触发,此时还不能调用setData。通常情况下,这个生命周期只应该用于该组件this添加一些自定义属性字段。

    + 在组件完全初始化完毕,进入页面节点树后,attached生命周期被触发,此时this.tata已被初始化完毕,这个生命周期很有用,绝大多数初始化工作可以在这个时机进行。

    + 在组件离开页面节点树后,detached 生命周期被触发,退出一个页面时,如果该组件还在页面节点树中,则detached会被触发。

    组件可用的全部生命周期

    created 组件刚刚被创建时执行

    attached 组件实例进入页面节点树树执行

    ready 组件在试图层布局完成后执行

    moved 组件被移动到节点树另一个位置时执行

    detached 组件从页面节点树移除时执行

    error  组件方法抛出错误时执行

    自定义生命周期函数:

    生命周期方法可以直接定义在Component 构造器的第一级参数中。

    自小程序基础库版本2.23起,组件的生命周期也可以在lifetimes 字段内进行声明(这是推荐的方法,优先级最高)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Component({
     
     lifetimes: {
       attached () {
     
       },
       detached () {
     
       }
      },
     
    })

    组件所在页面的生命周期:

    有一些特殊的生命周期,他们并非于组件有很强的关联性,但有时组件需要获知,以便组件内部处理,这样的生命周期称为“组件所在页面的生命周期”,在pageLifetimes 定义段中定义,其中可用的生命周期包括:

    show 组件所在页面被展示时执行

    hide 组件所在页面被隐藏时执行

    resize (object)  组件所在页面尺寸发生变化时执行。

    组件插槽:

    在组件的我先忙了中可以包含slot 节点,用于承载组件使用着提供的wxml结构。

    默认情况下,一个组件的wxml中只能有一个slot,需要使用多slot时,可以在组件js中声明启用。

    注意: 小程序目前只有默认插槽和多个插槽,暂不支持作用域插槽。

  • 相关阅读:
    001 数电 (1) : 数制和码制
    js页面滚动浮动层智能定位(MooTools)实例页面
    Value  of type java.lang.String cannot be converted to JSONObject 错误解决
    关于线程池的shutdown()方法
    Can't create handler inside thread that has not called Looper.prepare()
    配置 Win7 和 IIS7 以支持WCF
    复制JSON对象
    js页面滚动浮动层智能定位(jQuery)实例页面
    Enum和string的相互转换
    TBCompressor 2.4.2修改版,可对目录中的JS/CSS文件进行压缩
  • 原文地址:https://www.cnblogs.com/xiaomeng95/p/12976397.html
Copyright © 2020-2023  润新知