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

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

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小程序自定义组件与页面之间参数传递的更多相关文章

  1. 微信小程序自定义组件,提示组件

    微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加“components”目录,然后像添加Page页面一样添加自定义组 ...

  2. 微信小程序自定义组件的使用以及调用自定义组件中的方法

    在写小程序的时候,有时候页面的内容过多,逻辑比较复杂,如果全部都写在一个页面的话,会比较繁杂,代码可读性比较差,也不易于后期代码维护,这时候可以把里面某部分功能抽出来,单独封装为一个组件,也就是通常说 ...

  3. 微信小程序自定义组件实现

    官方从 1.6.3 开始对于自定义组件这一块有了比较大的变动,首先比较明显的感觉就是文档比以前全多了,有木有!,现在小程序支持简洁的组件化编程,可以将页面内的功能模块抽象成自定义组件,以便在不同的页面 ...

  4. 如何在小程序自定义组件和动态传入数据小demo

    在开发过程中,我们会将页面常用功能抽象为一个组件,这样既方便又可以避免代码冗余.小程序中也提供了自定义组件,了解Vue的伙伴们会发现其实和Vue的组件化很相似.这里用返回顶部功能来说说如何自定义组件, ...

  5. 微信小程序自定义组件-下拉框

    这个是网址https://www.cnblogs.com/zjjDaily/p/9548433.html 微信小程序之自定义select下拉选项框组件 知识点:组件,animation,获取当前点击元 ...

  6. 微信小程序自定义组件

    要做自定义组件,我们先定一个小目标,比如说我们在小程序中实现一下 WEUI 中的弹窗组件,基本效果图如下. Step1 我们初始化一个小程序(本示例基础版本库为 1.7 ),删掉里面的示例代码,并新建 ...

  7. 【微信小程序】mpvue中页面之间传值(全网唯一真正可行的方法,中指推了一下隐形眼镜)

    摘要: mpvue中页面之间传值(注意:是页面之间,不是组件之间) 场景:A页面跳转B页面,在B页面选择商品,将商品名带回A页面并显示 使用api: getCurrentPages step1: A页 ...

  8. wx小程序获取组件属性数据data-prop

    在微信小程序中有时会在组件上定义一些属性,使用data-来定义 <view data-idvalue="id" data-Index-Name="IndexName ...

  9. 微信小程序自定义组件封装及父子间组件传值

    首先在我们可以直接写到需要的 page 中,然后再进行抽取组件,自定义组件建议 wxzx-xxx 命名 官网地址:https://developers.weixin.qq.com/miniprogra ...

随机推荐

  1. 安装MySQL_Python时出现is not a supported wheel on this platform.

    MySQL-Python 数据库驱动安装 pip install mysql_python失败 不支持windows操作系统 解决: 自行下载安装 下载网站 http://www.lfd.uci.ed ...

  2. HibernateUtil工具类的使用

    为了简化代码的重复性,使用HibernateUtil工具类对Hibernate有关的代码进行整合 主要实现有,getSessionFactory(),getSession(),closeSession ...

  3. gulp 使用案例

    1.gulp 配置: // 引入 gulp var gulp = require('gulp'); var watch = require('gulp-watch'), //导入所有gulp需要的模块 ...

  4. css初探

    CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. selector {                   property: value;                 ...

  5. ELK新手教程——pomelo + log4js + ELK(一)

    随着项目越来越庞大,日志的数量也随之增多,游戏上线后的日志量肯定更多了,所以对日志的收集.存储.查询就非常重要了,开源界第一日志分析系统ELK必不可少. ELK系统由Elasticsearch(分布式 ...

  6. 0. 前言【从零开始学Spring Boot】

    [视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...

  7. 5、申请开发(Development)描述文件

    申请开发(Development)描述文件 在“Certificates, Identifiers & Profiles”页面“Provisioning Profiles”下选择“Develo ...

  8. openx 添加新表和据库表和字段

    OpenX的版本是2.8.10.在数据表加完数据库之后,还不能读取和保存字段. OpenX使用scheme来 管理数据库表和字段, 修改数据库结构同时也要修改相关schema, 一个是etc/tabl ...

  9. koltin语言学习(一)——什么是koltin

    转自:Koltin China (一) 介绍 #Kotlin-for-Android-Dev 1. 什么是Kotlin? Kotlin是JetBrains开发的基于JVM的语言.Kotlin是使用Ja ...

  10. 如何创建一个django工程与和mysql打通

    1. 安装Django # 在指定解释器环境下安装django 1.11.x # 在真实python3环境下: pip3 install django==1.11.x # 查看django版本: dj ...