wx小程序自定义组件与页面之间参数传递

Posted 折翼的飞鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wx小程序自定义组件与页面之间参数传递相关的知识,希望对你有一定的参考价值。

在开发中,很多页面中会使用相同的组件,这时可以将具有相同信息的部分封装成一个组件,方便开发中调用。在调用中可能会涉及到数据的传递问题,例如页面与组件,组件与组件直接的数据传递。

首先看看页面与组件直接的数据传递。

    1. 组件需要获取页面传递数据, 可以使用组件的属性来传递值

    2. 页面需要获取组件中修改的数据, 可以使用组件中的事件触发页面中定义的事件来获取

 

第一、组件获取页面中数据

  先创建一个自定义组件test-component

<!--components/test-component/test-component.wxml-->
<view>
  <input class=\'new-name\' placeholder=\'请输入名字\' bindinput="bindInputFunc" value=\'{{inputValue}}\'></input>
  <button class=\'btn\' size=\'mini\' bind:tap=\'search\'>搜索</button>

  <view>搜索记录:</view>
  <block wx:for=\'{{records}}\' wx:for-index="index" wx:for-item="record">
    <view class=\'record\'>{{record}}</view>
  </block>
</view>

第一、在组件test-component.js中定义一个属性

// components/test-component/test-component.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    namesData: {
      type:Array,
      value:[],
      observer: function (newVal, oldVal, changedPath) {
        // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:\'_propertyChange\'
        // 通常 newVal 就是新设置的数据, oldVal 是旧数据
        console.log(newVal);
        console.log(oldVal);
        this.setData({records:newVal})
      }
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    inputValue:\'\',
    records: []
  },

  /**
   * 组件的方法列表
   */
  methods: {
    //输入框输入事件
    bindInputFunc: function (e) {
      this.setData({
        inputValue: e.detail.value
      })
    },

    /**
     * 组件搜索按钮事件
     */
    search: function() {
      let records = [...this.data.records];
      records.push(this.data.inputValue);

      this.setData({ records, inputValue: \'\' })

      this.triggerEvent("search", { records});

      /*
      var myEventDetail = {} // detail对象,提供给事件监听函数
      var myEventOption = {} // 触发事件的选项
      this.triggerEvent(\'myevent\', myEventDetail, myEventOption)
      
      触发事件的选项包括:
          选项名            类型        是否必填        默认值        描述
          bubbles           Boolean       否           false        事件是否冒泡
          composed         Boolean       否           false        事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部
          capturePhase      Boolean       否           false         事件是否拥有捕获阶段

       */
      
    }
  }
})

 

 

第二、创建一个home页面,引用自定义组件test-component,就是在home.json中增加一个组件的引用

{
 "usingComponents":{
  "test-component":"/components/test-component/test-component"
    }
}
<test-component namesData=\'{{names}}\' bind:search=\'homeSearch\'></test-component>
// pages/home/home.js
Page({ 
  /**
   * 页面的初始数据
   */
  data: {
    names:[\'aaaa\',\'bbbb\',\'cccc\']
  },
/**
   * 搜索的点击事件
   */
  homeSearch: function(e) {
    console.log(e.detail); // 自定义组件触发事件时提供的detail对象
  }
 
})

 

     

 

以上是关于wx小程序自定义组件与页面之间参数传递的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序 页面跳转navigator与传递参数

微信小程序详解——页面之间的跳转方式路由和参数传递

壹度DIY_微信小程序组件_小程序插件开发

微信小程序从子页面退回父页面时的数据传递 wx.navigateBack()

微信小程序从子页面退回父页面时的数据传递 wx.navigateBack()

微信小程序|组件库自定义加载动画