收藏
回答

自定义组件中如何判断触发了哪个按钮?做监听?

自定义函数中会有一个带参函数返回一个promise,给调用页面,调用页面的then的事件用来接收组件页面点击了哪个按钮;

// 调用页面
this.assem = this.selectComponent("#assem");
this.assem.alert({
  text'标题',
 }).then((res) => {
      console.log(res)
    // on close
})


Component({
            assem: () => {},
            options: {
                multipleSlots: true
            },
            data: {
                loading: {
                    confirm: false,
                    cancel: false,
                }
            },
            properties: {
                text: {
                    type: String,
                    value: ''
                }
            },
            methods: {
                alert(data) {
                    this.setData({
                        text: data.text
                    });
                    this.setData({
                        text: data.text
                    });
                    const {
                        confirm,
                        cancel
                    } = this.data.loading;
                    return new Promise((resolve, reject) => {
                                console.log(confirm, cancel)
                                if (confirm) {
                                    resolve('success');
                                } else if (cancel) {
                                    resolve('cancel');
                                }
                            })
                        },
                        cancel() {
                            this.triggerEvent("cancel");
                            this.setData({
                                loading: {
                                    confirm: true
                                }
                            })
                        },
                        confirm() {
                            this.triggerEvent("confirm");
                            this.setData({
                                loading: {
                                    confirm: true
                                }
                            })
                        }
                }
            })


 很疑惑 调用页面的 then  这里如何 处理  

 如何在用户点击下面两个函数时候 返回对应的信息

 this.triggerEvent 会发生什么?

最后一次编辑于  2021-12-28
回答关注问题邀请回答
收藏

2 个回答

  • brave
    brave
    2021-12-28
    //父页面 wxml
    <alert id="assem"></alert>
    <button bindtap="showAlert">showAlert</button>
    // 父页面 js
    showAlert() {
      this.assem = this.selectComponent("#assem");
      this.assem.alert({
        text"标题",
      }).then((res) => {
        console.log("res =>", res)
      })
    }
    // 组件 wxml
    <block wx:if="{{isShow}}">
      <view>text: {{text}}</view>
      <button id="confirm" bindtap="tapHandler">confirm</button>
      <button id="cancel" bindtap="tapHandler">cancel</button>
    </block>
    // 组件 js
    Component({
      data: {
        text"",
        isShowfalse
      },
      methods: {
        alert(options) {
                // options可以多个参数
          return new Promise((resolve, reject) => {
            this.action = resolve
            wx.nextTick(() => {
              this.setData({
                ...options,
                isShowtrue
              })
            })
          })
        },
        action() {},
        tapHandler(e) {
          this.action(e.currentTarget.id)
          this.setData({
            isShowfalse
          })
        }
      }
    })
    // 实现效果
    

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    2021-12-28
    有用 3
    回复
  • xplee
    xplee
    2021-12-28

    this.triggerEvent("cancel")会触发你在页面定义的事件cancel

    https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html#%E8%A7%A6%E5%8F%91%E4%BA%8B%E4%BB%B6

    2021-12-28
    有用
    回复 8
    • 叶辉
      叶辉
      2021-12-28
      谢谢,但是答非所问……这种是在html 的DOM 里操作,但是现在是JS 直接操作的,所以上面代码里有 this.triggerEvent
      2021-12-28
      回复
    • xplee
      xplee
      2021-12-28回复叶辉
      你先看看文档上关于triggerEvent是怎么用的吧,换个思路解决问题
      2021-12-28
      回复
    • 叶辉
      叶辉
      发表于移动端
      2021-12-28回复xplee
      操作DOM是最简单的,但是不符合需求,现在做的是JS里如何让调用页面使用的函数一直pending等待状态,等待按钮触发后结束……
      2021-12-28
      回复
    • xplee
      xplee
      2021-12-28回复叶辉
      试试做一个状态变量,回调自己直到变量被更改
      2021-12-28
      回复
    • xplee
      xplee
      2021-12-28回复叶辉
      if else if都没走进去,当然就没有传出去,最后加一个resolve('other')看看
      2021-12-28
      回复
    查看更多(3)
登录 后发表内容