小程序组件引用、子父组件传值、监听等详细介绍、component、observers

这篇具有很好参考价值的文章主要介绍了小程序组件引用、子父组件传值、监听等详细介绍、component、observers。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

组件生命周期 

组件引用

组件传值

父组件给子组件传值

 子组件给父组件传值

observers 数据监听 

注意事项


组件生命周期 

在介绍组件属性时,先介绍下组件的生命周期,可用的全部生命周期如下表所示:

生命周期 参数 描述 最低版本
created 在组件实例刚刚被创建时执行 1.6.3
attached 在组件实例进入页面节点树时执行 1.6.3
ready 在组件在视图层布局完成后执行 1.6.3
moved 在组件实例被移动到节点树另一个位置时执行 1.6.3
detached 在组件实例被从页面节点树移除时执行 1.6.3
error Object Error 每当组件方法抛出错误时执行 2.4.1

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

组件所在页的生命周期:

生命周期 参数 描述 最低版本
show 组件所在的页面被展示时执行 2.2.3
hide 组件所在的页面被隐藏时执行 2.2.3
resize Object Size 组件所在的页面尺寸变化时执行 2.4.0

注意:自定义 tabBar 的 pageLifetime 不会触发。

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

 关于 组件生命周期 详见官方文档

组件引用

准备页面:组件header   与  页面index

1、创建组件文件

右键 >  新建文件夹components > 新建文件夹header (如果没有那么多组件可以省略,如果组件多的话最好文件夹分开)  > 右键 新建Component  (这里是global-header )

支付宝小程序父子组件传值,微信小程序学习笔记,前端,微信小程序,小程序组件,组件传值

global-header.wxml内容

<view class="header">
  <input type="text" placeholder="请输入内容"></input>
  <view bindtap="confirmBtn" class="btn">确定</view>
</view>

2、index页面引入组件

pages目录下 index.json

{
  "usingComponents": {
    "header":"../../components/header/global-header"
  }
}

解释:

usingComponents: {
    "组件名": "组件所在路径"
}

pages目录下 index.wxml

<header></header>

解释:

<组件名></组件名>  这个名字就是对应刚刚在 index.json 里起的名字

到此组件的引用就实现了,组件header的内容就引入到index里了

支付宝小程序父子组件传值,微信小程序学习笔记,前端,微信小程序,小程序组件,组件传值

关于组件properties、attached、observers、methods 的解释说明, (global-header.js

Component({
  /**
  * properties类似vue组件里的 props
  * 组件的对外属性,用来接收外界传到组件中的数据
  */
  properties: {//倾向于存储外界传递到组件中的数据
      /**
      name:{// 属性名 
          type:类型,//可选值为: Number,String、Boolean、Object、Array、null(表示不限制类型)
          value:值 ,
      },
      */
      // 如 用户信息 userInfo  对象类型,默认是空对象 
      userInfo: {  // 属性名 
          type: Object, // 属性类型 
          value:{},// 属性默认值
      },
      // 如 样例 demo  字符串类型,默认值'测试demo' 
      demo: {  // 属性名 
          type: string, // 属性类型 
          value:'测试demo',// 属性默认值
      },
  },
  // 组件的初始数据
  data:{},//倾向于存储组件的私有数据
  lifetimes: {},
  attached: function () {},
  //数据监听器  监听和响应任何属性和数据的变化,类似vue中watch
  observers: { },
   // 组件的方法列表,定义组件的事件处理函数
  methods: {
      //如 增加的方法
      add(){console.log('增加')},
      //如 删除的方法
      del(){console.log('删除')}
  }
})

关于 组件 Component 属性方法 等详细介绍见官方文档

组件传值

父组件给子组件传值

父组件(页面index)给子组件(组件header )传值  

1、在组件global-header.js中定义接收值的属性并设置类型以及初始值


  /**
   * 组件的属性列表
   * 在组件属性列表里定义 要接收值的 属性:valueText
   * 默认值为空,字符串类型,即input的value值
   */
  properties: {
    valueText:{
      type:String,
      value:''
    }
  },

2、global-header.wxml 中添加标签

<view class="header">
  <input type="text" value="{{valueText}}" placeholder="请输入内容"></input>
  <view bindtap="confirmBtn" class="btn">确定</view>
</view>

3、父组件,也就是index文件下,设置值并传给global-header

valueText 是 global-header中定义接收的属性名

value 是 index 中设置的值

<!-- index.wxml -->
<header valueText="{{value}}"></header>
// index.js
Page({
  data: {
    value:'index页面传给input的value值' // 从接口获取、或者自定义的 要传给 global-header的值
  },
})

到此 父组件的值就传给了子组件,运行如下:

支付宝小程序父子组件传值,微信小程序学习笔记,前端,微信小程序,小程序组件,组件传值

 子组件给父组件传值

子组件给父组件传值要 使用  this.triggerEvent() 方法 ,该方法接收 3 个参数

//this.triggerEvent('自定义方法名', 传到组件外的数据 , 是否冒泡选项 )
  this.triggerEvent('confirmBtn', myEventDetail, myEventOption)

第三个 myEventOption 是否冒泡的参数  又分  3 个选项,即下表

触发事件的选项包括:

选项名 类型 是否必填 默认值 描述
bubbles Boolean false 事件是否冒泡
composed Boolean false 事件是否可以穿越组件边界,为 false 时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部
capturePhase Boolean false 事件是否拥有捕获阶段

子组件给父组件传 例:

当点击按钮 “确定” 的时候,给父组件 传新的 valueText 值

<!-- 子组件页面 global-header.wxml -->
<view class="header">
  <input type="text" value="{{valueText}}" placeholder="请输入内容"></input>
  <view bindtap="confirmBtn" class="btn">确定</view>
</view>
// 子组件 global-header.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    valueText:String, //输入框内容
  },
  /**
   * 组件的方法列表
   */
  methods: {
    //确定按钮  给父组件index 传值 
    confirmBtn(e){
      // this.triggerEvent('传递给父组件的自定义事件名称 newValue',传给父组件的数据 valueText)
         this.triggerEvent('newValue',{valueText:'子组件更改了value'})
    },
  },

})

父组件 index 接收传过来的值

父组件监听事件  bindnewValue = "newValue"  等同与  bind:newValue="newValue" 

bind的是子组件自定义的方法名字newValue  ,父组件方法名字 newValue2(这里为了区分写了newValue2)

<!-- index.wxml --> 
<header valueText="{{value}}" bindnewValue="newValue2"></header>
// 父组件 index.js
Page({
  data: {
    value:'value值'
  },
  onLoad() {},
  newValue2(e){
    console.log('e:',e)
    console.log('e.detail:',e.detail)
  },
})

到此子组件传值,父组件接收完毕,运行如下:

支付宝小程序父子组件传值,微信小程序学习笔记,前端,微信小程序,小程序组件,组件传值

关于 组件通信 与 事件 详见官方文档

observers 数据监听 

类似 vue 中的 watch 功能,小程序基础库版本 2.6.1 开始支持

组件内global-header.js 监听 

// global-header.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    valueText:String, //输入框内容
  },

  /**
   * 组件的方法列表
   */
  methods: {
    confirmBtn(e){
      console.log('确定')
      this.triggerEvent('newValue',{valueText:'子组件更改了value'})
    },
  },
  observers:{
    //监听valueText 值变化
    // '字段valueText'(字段valueText的新值) {
    //   console.log(字段valueText的新值)
    //   do something
    // }
    'valueText'(newVal) {
      console.log(newVal)
    }

  }
})

也可以同时监听多个

  observers:{
    //字段 A 和 B
    // 'A,B'(A_val, B_val) {
    //   console.log(A_val, B_val)
    //   do something
    // }

    'A,B'(newA,newB) {
      console.log(newA,newB)
    }

  }

父组件内新增一个按钮以便触发再次改变value 值

<!-- index.wxml -->
<header valueText="{{value}}" bindnewValue="newValue2"></header>
<view bindtap="changeVal">点击再次改变value值</view>
// index.js
Page({
  data: {
    value:'value值'
  },
  onLoad() {},
  newValue2(e){
    console.log('e:',e)
    console.log('e.detail:',e.detail)
  },
  //触发按钮 在一次改变 传给 子组件的valueText的值
  changeVal(e){
    this.setData({
      value:'再次改变value值'
    })
  },
})

到此observers监听数据变化已完毕,运行如下

支付宝小程序父子组件传值,微信小程序学习笔记,前端,微信小程序,小程序组件,组件传值

支付宝小程序父子组件传值,微信小程序学习笔记,前端,微信小程序,小程序组件,组件传值

一次 setData 最多触发每个监听器一次。同时,监听器可以监听子数据字段

注意事项

  • 数据监听器监听的是 setData 涉及到的数据字段,即使这些数据字段的值没有发生变化,数据监听器依然会被触发。
  • 如果在数据监听器函数中使用 setData 设置本身监听的数据字段,可能会导致死循环,需要特别留意。
  • 数据监听器和属性的 observer 相比,数据监听器更强大且通常具有更好的性能。

关于 observer 数据监听 详见官方文档文章来源地址https://www.toymoban.com/news/detail-740393.html

到了这里,关于小程序组件引用、子父组件传值、监听等详细介绍、component、observers的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3中监听,组件通信如父子传值、Vuex、Event Bus的使用

    目录 一、监听 二、父子传值: 1、父传子: 2、子传父 三、全局状态管理(Vuex): 四、事件总线(Event Bus): 我们有一个父组件ParentComponent和一个子组件ChildComponent。在父组件中,我们使用:childProp=\\\"parentData\\\"将数据传递给子组件。在子组件中,我们使用defineProps来接收父组件

    2024年02月13日
    浏览(28)
  • React: 组件介绍 Components

    A  Component  is one of the core building blocks of React. In other words, we can say that every application you will develop in React will be made up of pieces called components. Components make the task of building UIs much easier. “Components let you split the UI into independent, reusable pieces, and think about each piece in isolation.”   Here we

    2024年02月10日
    浏览(29)
  • 微信小程序:父子组件传值

    在微信小程序里,父组件可以向子组件传值,子组件也可以向父组件传值,不过这两种传值方式不大相同,下面先简单介绍这两种传值的区别。 两者的区别 父组件向子组件传值,使用的是   属性绑定   的方法,并且只能传递普通类型的数据 子组件向父组件传值,使用的是

    2024年02月07日
    浏览(52)
  • 【微信小程序】父子组件之间传值

    1. 父组件向子组件 传值 2. 子组件向父组件 传值 父向子传值使用的是 属性绑定 ,子组件中的 properties 对象进行接收父组件传递过来的值。 子向父传值使用的是 自定义事件 ,父组件通过自定义事件中的 事件对象e 来接收子组件传递过来的值。 1.1 在父组件的.json文件中导入子

    2024年02月16日
    浏览(35)
  • Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)

    父组件:父组件引入子组件时,通过 child :parentValue = \\\"parentValue\\\"/child 子组件传值。 备注:这种方式父传值很方便,但是传递给后代组件不推荐(父-子-孙),且这种方式父组件不能直接修改父组件传过来的数据。 子组件:子组件通过props即 props:{ parentValue:{ type:String, default:\\\"\\\" } } 来

    2024年02月05日
    浏览(33)
  • 小程序父子组件间传值(微信/支付宝/钉钉)

    以传递一个简单的count值为例,实现父子组件的双向绑定,无论是点击父组件按钮还是子组件按钮,count值都自增 父传子 简单的将父组件在data中定义的属性,赋给子组件定义在properties中的属性即可 通过在父组件中设置一个按钮,使count自增,子组件的count属性也会随之自增

    2024年02月10日
    浏览(59)
  • 微信小程序之组件的四种传值方式

             我们可以利用微信小程序提供的本地存储 wx.setStorageSync 与 wx.getStorageSync 进行传值。  传递组件 接收组件 传递组件  接收组件 这时因为传递的是对象类型的数据,到另一个页面获取时会发现是\\\"[object,object]\\\",解决方法是利用JSON.stringify()和JSON.parse() 传递数据的组件

    2024年02月16日
    浏览(28)
  • 【SpringBoot】详细介绍Spring Boot中@Component

    在Spring Boot中,`@Component`是一个通用的注解,用于标识一个类是Spring框架中的组件。`@Component`注解是Spring的核心注解之一,它提供了自动扫描和实例化bean的功能。 具体来说, `@Component`注解的作用是将一个普通的Java类转化为Spring的组件。通过`@Component`注解标记的类会被Spring框

    2024年02月11日
    浏览(28)
  • 微信小程序 - 最新超详细 watch 侦听器功能,支持监听对象、数组及各种复杂对象数据,可在任意页面或组件中使用(绝非网上千篇一律的 “setWatcher“ 不能监听对象的垃圾方法,方案开箱即用)

    网上的教程全都是一摸一样的 setWatcher(this) 方案,重要的是这种方案不能监听对象,可以说一无是处。 本文 在微信小程序中实现 watch 监听器监听数据的功能,让小程序拥有 watch 监听对象、数组等复杂数据变化的能力, 您按照教程几分钟就能搞定,保证 100% 好用且使用方法

    2024年02月11日
    浏览(59)
  • 计算属性和监听属性,生命周期钩子,组件介绍

    # 计算属性是基于它们的依赖进行缓存的 # 计算属性只有在它的相关依赖发生改变时才会重新求值 # 计算属性就像Python中的property,可以把方法/函数伪装成属性 # 计算属性必须要有返回值 基本使用 首字母变大写 通过计算属性,重写过滤案例 只要属性发生变化,就会执行 函数

    2024年01月21日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包