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


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 相关文章推荐
添加到收藏夹代码(兼容几乎所有的浏览器)
Jan 09 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
jQuery提示插件alertify使用指南
Apr 21 Javascript
JS模拟并美化的表单控件完整实例
Aug 19 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
vue实现列表的添加点击
Dec 29 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
Jan 10 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
Aug 10 Javascript
浅谈vue的踩坑路
Aug 31 Javascript
Node.js实现一个HTTP服务器的方法示例
May 13 Javascript
详解基于原生JS验证表单组件xy-form
Aug 20 Javascript
javascript将扁平的数据转为树形结构的高效率算法
Feb 27 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基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
vue实现搜索功能
2019/05/28 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python线程的两种编程方式
2015/04/14 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python脚本实现验证码识别
2018/06/07 Python
django2.0扩展用户字段示例
2019/02/13 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
详解pandas赋值失败问题解决
2020/11/29 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
写好自荐信需做到的5要点
2014/03/07 职场文书
物业保安员岗位职责
2014/03/14 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
看上去很美观后感
2015/06/10 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android