美文网首页
微信小程序自定义组件封装及父子间组件传值的方法

微信小程序自定义组件封装及父子间组件传值的方法

作者: 我只是一个小前端 | 来源:发表于2019-06-17 11:55 被阅读0次

    首先在我们可以直接写到需要的 page 中,然后再进行抽取组件,自定义组件建议wxzx-xxx命名

    官网地址:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/

    例如,我们封装的组件名为 **wxzx-loadmore

    wxzx-loadmore.wxml

    <viewhidden="{{response.length < 1}}">

      <viewclass="weui-loadmore"hidden="{{is_loadmore}}">

        <viewclass="weui-loading"></view>

        <viewclass="weui-loadmore__tips">正在加载</view>

      </view>

      <viewclass="weui-loadmore weui-loadmore_line"hidden="{{!is_loadmore}}">

        <textclass="weui-loadmore__tips">{{tip}}</text>

      </view>

    </view>

    这里就是把index.wxml中的需要封装成组件的代码原样copy过来

    wxzx-loadmore.js

    Component({

      /**

       * 组件的属性列表

       */

      properties: {

        response: {

          type: String,

          value: ''

        },

        is_loadmore: {

          type: Boolean,

          value: false

        },

        tip: {

          type: String,

          value: '我是有底线的'

        }

      },

      /**

       * 组件的初始数据

       */

      data: {

      },

      /**

       * 组件的方法列表

       */

      methods: {

         emit: function(data) {

          // 自定义组件向父组件传值

          let val = data,

            my_event_detail = {

              val: val

            }

          // myevent自定义名称事件,父组件中使用

          this.triggerEvent('myevent', my_event_detail)

           /*

            在父组件中写上bind:myevent="get_emit",在父组件中就需要调用get_emit事件

           */

        },

      }

    })

    index.wxml 父组件

    <wxzx-loadmore

        response="{{comment_list}}"

        is_loadmore="{{is_loadmore}}"

        bind:myevent="get_emit"

        ></wxzx-loadmore>

    <!-- 这就是在父组件中调用子组件,然后基于子组件传值来在父组件中赋值 -->

    index.js 中

    // 接受子组件的传值

      get_emit: function(e) {

        this.setData({

          is_show: e.detail.val

        })

      },

    index.json 这里需要引入组件,在哪个父页面中引用子组件,就在哪个json文件中引入

    {

      "usingComponents": {

        "wxzx-loadmore": "/component/wxzx-loadmore/wxzx-loadmore"

      }

    }

    父组件向子组件传参

    声明:A组件为父组件,B组件为子组件,以下是A组件向B组件传参:

    在A组件中引入B组件

    在A组件的json中写入:

    {

    "component": true,

    "usingComponents": {

    "componentB": "../child2/child2"

    }

    }

    在A组件的wxml中写入:

    <view>我是组件A</view>

    <view>

    <view>子组件内容:</view>

    <componentBparamAtoB='我是A向B中传入的参数'/>

    </view>

    在B组件的js中写入:

    Component({

    behaviors: [],

    properties: {

    paramAtoB:String

    },

    data: {

    }, // 私有数据,可用于模版渲染

    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名

    attached: function() { },

    moved: function() { },

    detached: function() { },

    methods: {

    }

    })

    即在properties中定义A组件要传过来的参数类型

    在B组件的wxml中写入:

    <viewstyle='border:2px solid gray;'>

    <viewstyle='text-align:center;'>我是组件B</view>

    <view>A中传入的参数:{{paramAtoB}}</view>

    </view>

    总结: A组件向B组件传参,实际上就是在A组件中引入B组件的时候,带上一个属性paramAtoB,并且给其赋值,然后B组件通过这个属性名称paramAtoB,获取其值

    子组件向父组件传参

    声明:A组件为父组件,B组件为子组件,以下是B组件向A组件传参:

    要让子组件给父组件传参,首先得在父组件引入子组件的时候,加个触发事件,如下:

    在父组件A中wxml:

    <viewstyle='padding:20px;border:2px solid red;'>

    <viewstyle='text-align:center;'>我是组件A</view>

    <view>

    <view>A组件内容:</view>

    <view>B组件传入参数:{{paramBtoA}}</view>

    <componentBparamAtoB='我是A向B中传入的参数'bind:myevent="onMyEvent"/>

    </view>

    </view>

    myevent就是绑定的触发事件

    在父组件A中js:

    Component({

    behaviors: [],

    properties: {

    },

    data: {

    }, // 私有数据,可用于模版渲染

    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名

    attached: function() { },

    moved: function() { },

    detached: function() { },

    methods: {

    onMyEvent:function(e){

    this.setData({

    paramBtoA: e.detail.paramBtoA

    })

    }

    }

    })

    onMyEvent就是当被子组件触发时的函数

    在子组件B中wxml:

    <viewstyle='border:2px solid gray;'>

    <viewstyle='text-align:center;'>我是组件B</view>

    <view>A中传入的参数:{{paramAtoB}}</view>

    <buttonbindtap='change'>向A中传入参数</button>

    </view>

    button按钮点击事件一触发,就可以传入参数进入父组件A中,在子组件B中js:

    Component({

    behaviors: [],

    properties: {

    paramAtoB:String

    },

    data: {

    }, // 私有数据,可用于模版渲染

    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名

    attached: function() { },

    moved: function() { },

    detached: function() { },

    methods: {

    change:function(){

    this.triggerEvent('myevent', { paramBtoA:123});

    }

    }

    })

    this.triggerEvent就是按钮点击之后执行的事件,触发myevent事件,传入参数paramBtoA进入父组件

    相关文章

      网友评论

          本文标题:微信小程序自定义组件封装及父子间组件传值的方法

          本文链接:https://www.haomeiwen.com/subject/pajrjqtx.html