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


Posted in Javascript onAugust 28, 2018

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

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

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

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

wxzx-loadmore.wxml

<view hidden="{{response.length < 1}}">
  <view class="weui-loadmore" hidden="{{is_loadmore}}">
    <view class="weui-loading"></view>
    <view class="weui-loadmore__tips">正在加载</view>
  </view>
  <view class="weui-loadmore weui-loadmore_line" hidden="{{!is_loadmore}}">
    <text class="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>
<componentB paramAtoB='我是A向B中传入的参数'/>
</view>

在B组件的js中写入:

Component({

behaviors: [],

properties: {
paramAtoB:String
},
data: {

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

// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
attached: function () { },
moved: function () { },
detached: function () { },

methods: {

}

})

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

在B组件的wxml中写入:

<view style='border:2px solid gray;'>
<view style='text-align:center;'>我是组件B</view>
<view>A中传入的参数:{{paramAtoB}}</view>
</view>

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

子组件向父组件传参

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

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

在父组件A中wxml:

<view style='padding:20px;border:2px solid red;'>
<view style='text-align:center;'>我是组件A</view>
<view>
<view>A组件内容:</view>
<view>B组件传入参数:{{paramBtoA}}</view>
<componentB paramAtoB='我是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:

<view style='border:2px solid gray;'>
<view style='text-align:center;'>我是组件B</view>
<view>A中传入的参数:{{paramAtoB}}</view>
<button bindtap='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进入父组件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript针对DOM的应用分析(二)
Apr 15 Javascript
Javascript的时间戳和php的时间戳转换注意事项
Apr 12 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
Sep 22 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
Aug 10 Javascript
javascript实现动态标签云
Oct 16 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
Dec 11 Javascript
Javascript中的 “&amp;” 和 “|” 详解
Feb 02 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
Sep 29 Javascript
layui实现文件或图片上传记录
Aug 28 #Javascript
利用vue.js把静态json绑定bootstrap的table方法
Aug 28 #Javascript
react native 获取地理位置的方法示例
Aug 28 #Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 #Javascript
JavaScript模拟实现自由落体效果
Aug 28 #Javascript
vue-cli3脚手架的配置及使用教程
Aug 28 #Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 #Javascript
You might like
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
深入理解PHP中的count函数
2016/05/31 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
python统计cpu利用率的方法
2015/06/02 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
美国玩具公司:U.S.Toy
2018/05/19 全球购物
网吧收银员岗位职责
2013/12/14 职场文书
志愿者活动总结范文
2014/04/26 职场文书
物理学专业求职信
2014/07/04 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python
MyBatis 动态SQL全面详解
2021/10/05 MySQL
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang