關於does not have a method xx to handle event "tap"我有話要說

前言
> 我正在對接微信小程序訂閱消息功能,看了官方文檔覺得挺簡單的。於是踩坑開始了

###### 應該是這樣簡單的
```
wx.requestSubscribeMessage({
tmplIds: [''],
success (res) { }
})
```
###### 你直接調用會得到
`訂閱失敗 {errMsg: "requestSubscribeMessage:fail can only be invoked by user TAP gesture."}`

###### 根據這個錯誤,得到必須要用手動調用(這個要好好理解)。調整後你得到以下代碼

```
<button open-type="openSetting" bindopensetting="openSettings">打開設置頁</button>
這個按鈕會直接打開授權設置頁面,目前還不是你的業務範圍(你會搜到的大部分答案)

第二種方式是這樣綁定bindtap
<button >授權</button>
如果你也是用的uniAPP開發
methods: {
openSettings(){
wx.requestSubscribeMessage({
tmplIds: [''],
success (res) { }
})
}
}
```
###### 第一種方法,目前不需要,你需要的彈出訂閱消息授權框

###### 於是方式二,你始終得到`Component "pages/index/home" does not have a method "openSettings" to handle event "tap".`

![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2f85e6eab3bf46e693219cf5b379c605~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1011&h=214&s=34951&e=png&b=332b00)

然後開始各種網上找答案

![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7015765dad21496e86db26b3b6428456~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2908&h=61&s=26884&e=png&b=d2e2fc)

###### 這裏我也把看到的一些答案彙總
1. bindtap=" openSettings " 是否前後有空格
2. js文件不需要包一層methods,組件形式需要包一層【這裏我挪進去挪出來試,無用】
3. bindtap="這裏的函數不要帶參數直接寫函數名";如果要傳參數使用data-xxx的形式傳遞
4. 在js中沒有定義方法

以上都沒有解決我的問題
###### 回到最原始的時候,微信要求該方法必須是用戶調用,於是機靈了一下,不用bindtap直接用click。得到了我想要的結果。
`<button @click="openSettings()">打開</button>`

![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8883e121151145749748875d173a3ced~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=492&h=394&s=17500&e=png&b=fdfdfd)

###### 總結
這個功能很難嗎?我還是覺得簡單的,但是我卻花了兩個小時以上。原本半個小時不到就可以完成的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章