二十八.组件和页面通信

╰半夏微凉° 2023-07-09 02:29 88阅读 0赞

组件和页面通信

文章目录

  • 组件和页面通信
    • 一.向组件传递数据 - properties
    • 二.给自定义组件传递样式
    • 三.组件向外界传递事件-自定义事件

在这里插入图片描述

一.向组件传递数据 - properties

  1. //自定义组件prop
  2. <view>{
  3. {title}}</view>
  4. Component({
  5. properties:{
  6. //这个位置不是放变量的值, 而是放变量的类型
  7. //title: String
  8. title: {
  9. type:String,
  10. value:'我是默认标题',
  11. //监听函数
  12. observer:function(newVal, oldVal){
  13. console.log(newVal, oldVal)
  14. }
  15. }
  16. }
  17. })
  18. //外部组件
  19. <prop title="我是标题一"></prop>
  20. <prop title="我是标题二" />

二.给自定义组件传递样式

  1. //自定义组件prop
  2. <view class="titleclass">{
  3. {title}}</view>
  4. Component({
  5. properties:{
  6. //这个位置不是放变量的值, 而是放变量的类型
  7. //title: String
  8. title: {
  9. type:String,
  10. value:'我是默认标题',
  11. //监听函数
  12. observer:function(newVal, oldVal){
  13. console.log(newVal, oldVal)
  14. }
  15. }
  16. },
  17. externalClasses:['titleclass']
  18. })
  19. //外部组件
  20. <prop title="我是标题一" titleclass="red"></prop>
  21. <prop title="我是标题二" />
  22. `
  23. .red{
  24. color:red;
  25. }

三.组件向外界传递事件-自定义事件

  1. //自定义组件 event
  2. <button size="mini" bind:tap="handleIncrement">
  3. 1
  4. </button>

自定义组件中的事件不能直接写到Component中, 要写到methods中

  1. //自定义组件
  2. Component({
  3. methods: {
  4. handleIncrement(){
  5. //第一个参数是要传递出去的事件的名字, 第一个参数是传递的数据
  6. this.triggerEvent('increment',{ name:'zhangsan'},{ });
  7. }
  8. }
  9. })
  10. //外部组件
  11. <view>当前计数:{
  12. {counter}}</view>
  13. <event bind:increment="handleIncrement"></event>
  14. Page({
  15. data:{
  16. counter:0
  17. },
  18. //自定义事件传递的数据在event中的detail中
  19. handleIncrement(event){
  20. this.setData({
  21. counter: this.data.counter + 1
  22. })
  23. }
  24. })

例:
在这里插入图片描述

  1. <!-- 自定义事件的练习:自定义组件nav -->
  2. <view class="nav">
  3. <block wx:for="{ {titles}}" wx:key="index">
  4. <view class="nav1 { {currentItem == index ? 'nav2' : ''}}" bind:tap="handleItemClick" data-index="{ {index}}">
  5. <text>{
  6. {item}}</text>
  7. </view>
  8. </block>
  9. </view>
  10. // components/nav/nav.js
  11. Component({
  12. properties: {
  13. titles:{
  14. type: Array,
  15. value: []
  16. }
  17. },
  18. data: {
  19. currentItem:0
  20. },
  21. methods: {
  22. handleItemClick(event){
  23. //1.取出index
  24. const index = event.currentTarget.dataset.index;
  25. //2.修改currentItem
  26. this.setData({
  27. currentItem: index
  28. })
  29. //3.通知页面内部的点击事件
  30. this.triggerEvent('itemclick', { index:index, title:this.properties.titles[index]}, { })
  31. }
  32. }
  33. })
  34. .nav{
  35. display:flex;
  36. height:88rpx;
  37. line-height: 88rpx;
  38. background: #ccc;
  39. color:#fff;
  40. }
  41. .nav1{
  42. flex:1;
  43. text-align: center;
  44. }
  45. .nav2{
  46. color:#fac;
  47. }
  48. .nav2 text{
  49. padding:20rpx 10rpx;
  50. border-bottom:#fac 6rpx solid;
  51. }
  52. {
  53. "component": true,
  54. "usingComponents": { }
  55. }
  56. <!-- 外部组件 -->
  57. <!-- 自定义事件的练习 -->
  58. <nav titles="{ {['流行','新款','精选']}}" bind:itemclick="handleNavClick"/>
  59. Page({
  60. handleNavClick(event){
  61. console.log(event);
  62. }
  63. })
  64. {
  65. "usingComponents": {
  66. "nav": "/components/nav/nav"
  67. }
  68. }

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读

    相关 算法:前缀

    描述 给定n个字符串,再询问m次,每个询问给出一个字符串,求出这个字符串是n个字符串里,多少个串的前缀。 前缀:从头开始的一段连续子串。比如字符串ab是字符串abcd的