收藏
回答

为什么父组件中的checkbox-group绑定事件不触发?

这是结合网上示例准备编写一带复选框的树形菜单,可以多选,动态加载下一级数据,

子组件wxml文件:

<view class="container">

  <view style="padding:5rpx 0;">

    <image wx:if='{{ isBranch }}' bindtap='toggle' src="{{ open ? '/images/tree_show_less.png' : '/images/tree_show_more.png'}}"  class='item-sImg'

    data-itemid='{{ model.id }}'></image>

    <image wx:else src='/images/tree_turning_right.png'  class='item-sImg'></image>

    <checkbox value="{{model.id}}" checked="{{model.checked}}"

                   class='checkbox checkbox-scale'/>

    <text bindtap='tapItem' data-itemid='{{ model.id }}' data-value='{{ model.text }}'>{{ model.text }}</text>

  </view>

  <view style='padding-left: 25rpx;' wx:if='{{ isBranch }}' hidden='{{ !open }}'>

    <mytree wx:for='{{ model.nodes }}' wx:key='id' model='{{ item }}'></mytree>

  </view>

</view>

子组件js文件:

Component({

  properties: {

    model: Object,

  },

  data: {

    open: true,

    isBranch: false,

  },

  methods: {

    toggle: function(e) {

      if (this.data.isBranch) {

        this.setData({

          open: !this.data.open,

        })

        //add test code by xdl 2020-10-9

        var itemid = e.currentTarget.dataset.itemid;

        console.log("mytree goggle itemid:"+itemid)

        //根据itemid读取数据,改变model,重新渲染

        this.triggerEvent('toggle', { itemid: itemid }, { bubbles: true, composed: true });

         //add by xdl 2020-10-9 end

      }

    },    

    tapItem: function(e) {

      var itemid = e.currentTarget.dataset.itemid;

      var value = e.currentTarget.dataset.value;

      this.triggerEvent('tapitem', { value: value,itemid: itemid }, { bubbles: true, composed: true });

    }

  },

  ready: function(e) {

    this.setData({

      isBranch: Boolean(this.data.model.nodes && this.data.model.nodes.length),

    });

  }

})

父组件wxml文件:

<view class='com-selectBox'>

    <view class='com-sContent' bindtap='selectToggle'>

        <view class='com-sTxt'>{{nowText}}</view>

        <image src='/images/tree_show_more.png'  class='com-sImg'></image>

    </view>

    <view class='com-sList' wx:if="{{selectShow}}">      

      <view wx:if='{{ isBranch }}' hidden='{{ !open }}'>

        <checkbox-group bindchange="checkboxChange">

          <mytree wx:for='{{ model.nodes }}' wx:key='id' model='{{ item }}'  bind:tapitem='tapItem'  ></mytree>

         </checkbox-group>

      </view>     

    </view>

</view>

父组件js文件:

// Componet/Componet.js

Component({

  /**

   * 组件的属性列表

   */

    properties: {

      model: Object

    },

  /**

   * 组件的初始数据

   */

    data: {

        selectShow:false,

        nowText : "请选择",

        open: true,

        isBranch: false,

    },

  /**

   * 组件的方法列表

   */

    methods: {

        selectToggle:function(){

            var nowShow=this.data.selectShow;

            this.setData({

                selectShow: !nowShow

            })

        },

        checkboxChange: function (e) {            

          console.log("treeSelect checkboxChange:"+e.detail.value)           

          this.triggerEvent('checkboxChange', { selectedIds: e.detail.value }, { bubbles: true, composed: true });

        },

        tapItem: function(e) {

          var itemid = e.detail.itemid;

          var value = e.detail.value;

          this.triggerEvent('tapitem', { value: value,itemid: itemid }, { bubbles: true, composed: true });

          this.setData({

            selectShow: false,

            nowText:value

          })

        }

    },

    ready: function(e) {

      this.setData({

        isBranch: Boolean(this.data.model.nodes && this.data.model.nodes.length)

      });

    }

})

编译没问题,但无论怎样操作checkbox,都不能触发checkbox-group之bindchange事件,请各位老师指点迷津

回答关注问题邀请回答
收藏
登录 后发表内容
问题标签