onShow() { const selectedCity = citySelector.getCity(); // 选择城市后返回城市信息对象,若未选择返回null console.log("555", selectedCity); this.city = selectedCity.fullname this.latitude = selectedCity.location.latitude this.longitude = selectedCity.location.longitude,有一个报错 Cannot read property 'fullname' of null,怎么解决
时间: 2024-02-21 09:58:13 浏览: 30
这个错误的原因是 `selectedCity` 可能为 `null`,你需要对其进行判断,避免访问 `null` 对象的属性。你可以使用类似下面的代码进行判断:
```
onShow() {
const selectedCity = citySelector.getCity();
if (selectedCity) {
console.log("555", selectedCity);
this.city = selectedCity.fullname;
this.latitude = selectedCity.location.latitude;
this.longitude = selectedCity.location.longitude;
}
}
```
这样,当 `selectedCity` 为 `null` 时,就不会执行后面的代码,从而避免了访问 `null` 对象的错误。
相关问题
onShow() { console.log("---onShow---"); this.Get(); console.log(this.Arr.parkingList); const formattedJsonString = this.Arr.parkingList.replace(/\\/g,''); // 解析为 JavaScript 对象 const jsonData = JSON.parse(formattedJsonString); // 访问 parkingName 属性 const parkingName = jsonData[0].parkingName; console.log(parkingName); this.packData.Name=parkingName; }
根据你提供的代码,我注意到你正在尝试在 `onShow` 方法中获取数据并将其解析为 JavaScript 对象。
然而,根据你的代码中的 `console.log(this.Arr.parkingList)`,我看不到 `Arr` 对象的定义。因此,我假设 `Arr` 是一个 Vue 组件实例的属性。如果是这样的话,请确保你在 `data` 属性或 `computed` 属性中定义了 `Arr`。
另外,你在使用 `JSON.parse()` 方法之前,对字符串执行了 `replace(/\\/g,'')` 操作。这是为了移除字符串中的反斜杠字符。然而,请注意,在将字符串传递给 `JSON.parse()` 之前,确保字符串是一个有效的 JSON 字符串,否则会导致解析错误。
根据你的代码,下面是一个可能的修改示例:
```javascript
data() {
return {
Arr: {
parkingList: ''
},
packData: {
Name: ''
}
};
},
onShow() {
console.log("---onShow---");
this.Get();
console.log(this.Arr.parkingList);
// 移除字符串中的反斜杠字符
const formattedJsonString = this.Arr.parkingList.replace(/\\/g, '');
// 解析为 JavaScript 对象
try {
const jsonData = JSON.parse(formattedJsonString);
const parkingName = jsonData[0].parkingName;
console.log(parkingName);
this.packData.Name = parkingName;
} catch (error) {
console.error('解析 JSON 出错:', error);
}
}
```
请确保在 `data` 方法中正确定义了 `Arr` 和 `packData` 对象,并在 `Get()` 方法中正确获取了数据。如果仍然有问题,请提供更多代码和上下文信息,以便我更好地帮助你解决问题。
<script> export default { globalData: { typeid: 1, userInfo: {} }, onLaunch: function() { console.log('App Launch') uni.login({ "provider": "weixin", "onlyAuthorize": true, // 微信登录仅请求授权认证 success: (event) => { const { code } = event //客户端成功获取授权临时票据(code),向业务服务器发起登录请求。 uni.request({ url: this.serverUrl + '/user/login', data: { code: code }, success: (res) => { //获得token完成登录 const { data :token } = res.data // base64解码token的payload const userStr = decodeURIComponent(escape(atob(token.split('.')[1]))) const userObj = JSON.parse(userStr) // 用户信息 this.globalData.userInfo = JSON.parse(userObj.payload) console.log(this.globalData.userInfo) // 存储token uni.setStorageSync('token', token) console.log('token') } }); } }) }, onShow: function() { console.log('App Show') }, onHide: function() { console.log('App Hide') } } </script> <style> </style>
这是一个小程序的 App 实例,使用了uni-app框架。在小程序启动时,会执行 onLaunch 函数。在该函数中,先进行微信登录,获取授权临时票据 code,并向业务服务器发起登录请求。登录成功后,将用户信息存储到全局变量 globalData 中,并将 token 存储到本地缓存中。在小程序显示和隐藏时,会分别执行 onShow 和 onHide 函数。