• 微信小程序 父子组件 通信 ---监听数据


    父子组件通信 目前共有2种

    1. 模板创建 template (用于展示) 

    components/tips/index.wxml

    <template name="tabBar">
      子组件 <view class="container">{{tabBar}}</view> </template>
    pages/test/index.wxml
    
    <import src="../../components/tips/index.wxml"/>
    <view>
      <view>父组件</view>
     <view>
      <template data="{{tabBar}}" is="tabBar"></template>
    </view>
    </view>
    
    pages/test/index.js
    
    Page({
      data: {
          tabBar: '暂时没有任务哦~'
      }
    })
    

      

    2. 创建组件 Component (用户交互/逻辑)

    父组件

    pages/Hello/index.wxml

    <!-- 父组件 -->


    <view class="parentsContent"> <view>备注:父组件中定义变量,子组件监听并计算返回值,类似vue的computed</view> <view class="parentsAll"> <view>下面是父组件数据</view> <input placeholder="请输入a" value="{{numberA}}" bindblur="bindChangeA"/> <input placeholder="请输入b" value="{{numberB}}" bindblur="bindChangeB"/> <view>a*b结果: {{priceAll}}</view> <testComponent bind:myevent="onMyevent" numberA="{{numberA}}" numberB="{{numberB}}"> <text>将父组件的一段文字放入子组件的slot中</text> </testComponent> </view> </view>
    pages/Hello/index.wxss

    /* 父组件 */ .parentsAll{ border: 1px solid blue; padding: 10px; margin-top: 10px; } .parentsContent{ padding: 10px; margin: 10px; }
    pages/Hello/index.json

    // 父组件
    { "component": true, // 开启自定义组件 "usingComponents": { "testComponent": "/pages/test/index" // 自定义组件的引用 } }
    pages/Hello/indexjs

    // 父组件
    Page({ data: { numberA: 0, numberB: 1, priceAll: 0 }, onReady: function () { }, //定义的事件: onMyevent: function (e) { var get_text = e.detail.text; console.log('进入onMyevent', e) this.setData( { "ctext": get_text, "priceAll": e.detail.total }, ) }, bindChangeA: function (params) { this.setData({ numberA: params.detail.value }) }, bindChangeB: function (params) { this.setData({ numberB: params.detail.value }) } })

      

    子组件

    components/testAll/index.wxml
    
    <view class="test_all">
      <view>下面子组件数据</view>
      <button bindtap="_onTap" type="primary" size="mini">
        a*b点击事件
      </button>
    
      <view class='hahaha'>
        <slot />
      </view>
    </view>
    
    components/testAll/index.wxss
    
    .test_all{
      border: 1px solid red;
      padding: 10px;
      margin-top: 10px;
    }
    
    components/testAll/index.js
    
    
    Component({
    
      behaviors: [],
    
      properties: {
        numberA: {
          type: Number,
          observer: function (news, olds, path) {
            this.setData({
              numberAs: news
            })
          }
        },
        numberB: {
          type: Number,
          observer: function (news, olds, path) {
            this.setData({
              numberBs: news
            })
          }
        }
      },
    
      data: {
        numberAs: 0,
        numberBs: 1,
        priceTotal: 0
      }, // 私有数据,可用于模板渲染
    
      observers: {
        'numberAs, numberBs': function (numberA, numberB) {
          this.setData({
            priceTotal: (numberA * numberB).toFixed(2)
          })
        }
      },
    
      lifetimes: {
        // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
        attached: function () { },
        moved: function () { },
        detached: function () { },
      },
    
      // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
      attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
      ready: function () {
        console.log("子组件中的数据:", this.data)
      },
    
      pageLifetimes: {
        // 组件所在页面的生命周期函数
        show: function () { },
        hide: function () { },
        resize: function () { },
      },
     // 方法
      methods: {
        onMyButtonTap: function () {
          this.setData({
            // 更新属性和数据的方法与更新页面数据的方法类似
          })
        },
        // 内部方法建议以下划线开头
        _onTap: function () {
          console.log('this', this.data)
          var myEventDetail = { // detail对象,提供给事件监听函数  //监听函数可以通过e.detail查看传递的数据;
            hidden: false,
            text: this.data.ctext,
            total: this.data.priceTotal
          }
          var myEventOption = {
    
          } // 触发事件的选项
    
          this.triggerEvent('myevent', myEventDetail, myEventOption);
        }
      }
    })
    

      

  • 相关阅读:
    MVC EF 修改 封装类 通用泛型方法(一)
    泛型方法动态生成表达式树 Expression
    SEO 优化,网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)
    NPOI mvc easyui 根据Excel模板 生成Excel
    A generic error occurred in GDI+. 上传图片报错
    bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪
    jquery.validate 验证(支持前台js验证通过,然后ajax后台数据校验)二
    jquery.validate 验证(支持前台js验证通过,然后ajax后台数据校验)
    Font-Awesome 体验 鼠标进入图标变大
    .net cookie
  • 原文地址:https://www.cnblogs.com/gqx-html/p/13066377.html
Copyright © 2020-2023  润新知