dcloudio / dcloudio/uni-app

微信小程序端报错:Cannot read property 'stopPropagation' of undefined

Open
#2,400 2 comments 4 reactions 0 assignees View on GitHub
doubleCheck mp-weixin 三方生态问题
Dominant language
JavaScript
Stars
41.6k
Forks
3.7k
Avg merge
7h 6m
Merged PRs (30d)
6

Description

**问题描述**
假设有如下代码:
```vue



这是一条信息

export default {
data() {
return {
show: false,
}
},
}

```

上述代码想要实现当点击 icon 时切换显示 message,而点击 icon 以外的任意地方则隐藏 message。

但在微信小程序中点击 icon 时报如下错误:
![image](https://user-images.githubusercontent.com/27952659/103735874-f50bbb00-5029-11eb-8906-9d1cd12ac033.png)

如果将代码修改为这样,则运行正常:
```diff


-
+
这是一条信息

export default {
data() {
return {
show: false,
}
},

+ methods: {
+ toggleShowMessage() {
+ this.show = !this.show
+ },
+ },
}

```
以下是两者生成的微信小程序代码(只展示相关代码):
- 这是异常的:
```html

```
```js
_vm.e1 = function($event) {
$event.stopPropagation()
_vm.show = !_vm.show
}
```
- 这是正常的:
```html

```
```js
methods: {
toggleShowMessage: function toggleShowMessage() {
this.show = !this.show;
}
}
```

**猜想原因**
当事件绑定的是单行的 js 代码,但在小程序端也会将它放在一个新的方法中,并且由于使用了 `.stop` 事件修饰符,所以在该方法内部使用了 `$event.stopPropagation()`,然而并没有在 template 中把 `$event` 传递进去,所以导致报错。

因为把异常的 template 代码改成这样,是能够正常运行的:
```diff

```
否则在 `e1 ` 这个方法内部打印 `$event` 就是 `undefind`。

**期待结果**
当在事件绑定了单行代码时,也要将 $event 参数传递到 uni-app 内部新增这个的方法上。

或者干脆不要加 `$event.stopPropagation()` 这一行。

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.