下级页面 uni.$on('UserInfo',res=>{ console.log(res); }) 取不到值
时间: 2024-11-09 21:24:12 浏览: 6
JavaScript调试技巧之console.log()详解
5星 · 资源好评率100%
在您提到的情况下,如果在下级页面的`uni.$on`监听器中无法接收到上一级页面通过`uni.$emit`传递过来的`userInfo`值,可能是因为以下几个原因:
1. **事件名称不匹配**[^1]: 您在监听器中的事件名称是`UserInfo`,但发射事件时使用的是`addUserInfo`。确保两个地方的事件名称一致。
2. **触发时机错误**: `uni.$on`通常在组件加载完成 (`onLoad` 或者其他生命周期钩子) 之后调用,如果在这些生命周期之前就尝试接收事件,可能会导致错过事件。
3. **传递值的问题**: 如果`userInfo`是在某个特定的操作触发时才赋值,可能在`uni.$emit`之前还没有设置。确保`this.userInfo`已经被正确地初始化并赋值。
4. **路径问题**: 如果`userInfo`位于组件的私有属性或者不是直接从父组件继承来的,那么需要在`$emit`时明确指定路径,如`this.$parent.userInfo`。
修复这个问题的方法可以尝试调整如下:
1. 确保在下级页面的`onLoad`或相应生命周期内监听事件:
```javascript
onLoad() {
uni.$on('addUserInfo', res => {
console.log(res);
});
}
```
2. 检查事件名称是否正确并在对应的页面中发出:
```javascript
// 上级页面
this.$emit('UserInfo', this.userInfo);
```
如果以上步骤都没有解决问题,可能需要查看具体的上下文环境,以确定是否有其他意外情况影响了事件的传播。
阅读全文