黑马点评中解决附近餐厅前端不显示的问题

用postman发请求过去, 发现是可以正常响应数据的, 但是直到查看controller层才发现问题

return Result.ok(shopService.queryOfType(typeId, current,x, y));

我返回了两次Result, 形成了两个Result嵌套, 这能刷出来就有鬼了

>检讨: 解决不出来就死扣, 感情用事. 情绪上头就应该立刻脱离, 冷静再看. 严格遵守时间规定. 

写前端代码出这种非常简单的错误, 导致后期修改麻烦. 

### 黑马点评店铺前端显示解决方案 在黑马点评项目的开发过程中,如果遇到店铺信息无法正常展示的情况,通常可能是由于前后端数据交互异常、Vue组件配置错误或其他技术细节未处理妥当所致。以下是针对该问题的具体分析与解决办法。 #### 1. 数据返回格式验证 确保后端 `queryById` 方法返回的数据结构符合前端 Vue 组件的要求。例如,在上述代码片段中,后端通过 `Result.ok(shop)` 返回商户信息[^1]。然而,如果返回的对象符合预期(如缺少某些字段),可能会导致前端解析失败从而引发警告或错误。 因此需要确认: - 后端返回对象是否包含完整的属性。 - 属性名称大小写以及命名方式需严格匹配前端定义。 ```java @Override public Result queryById(Long id) { Shop shop = queryWithMutex(id); if (shop == null) { return Result.fail("店铺存在!!"); } // 确保返回的是一个标准 JSON 对象 Map<String, Object> resultMap = new HashMap<>(); resultMap.put("id", shop.getId()); resultMap.put("name", shop.getName()); resultMap.put("address", shop.getAddress()); return Result.ok(resultMap); } ``` #### 2. Vue 数据初始化函数修正 从前端报错 `[Vue warn]: data functions should return an object:` 可知,Vue 实例中的 `data()` 函数可能存在问题[^2]。具体表现为它未能正确返回一个 JavaScript 对象实例。 修改如下: ```javascript export default { name: 'ShopDetail', data() { // 确保此处始终返回一个新的对象实例 return { shopInfo: {} // 初始化为空对象而非其他类型变量 }; }, created() { this.fetchData(); }, methods: { fetchData() { const id = this.$route.params.id; // 获取路由参数中的ID axios.get(`/api/shop/${id}`) .then(response => { this.shopInfo = response.data.result; }) .catch(error => { console.error('获取商铺详情失败', error); }); } } }; ``` 这里强调两点: - **`data()` 必须是一个函数** 并且每次调用都应创建独立的新对象实例。 - 调整 API 请求路径 `/api/shop/:id` 来适配实际部署环境下的服务地址。 #### 3. 页面渲染逻辑优化 假设存在部分条件分支下未加载任何 DOM 结构,则可能导致空白界面现象。为此可以在模板文件 `<template>` 中加入占位符或者等待指示器来提升用户体验。 示例调整后的 HTML 片段如下所示: ```html <template> <div class="container"> <!-- 加载状态 --> <div v-if="!Object.keys(shopInfo).length">正在加载...</div> <!-- 商店详细信息 --> <div v-else> <h1>{{ shopInfo.name }}</h1> <p>地址:{{ shopInfo.address }}</p> </div> </div> </template> ``` 此改动解决了因异步请求延迟造成的短暂无内容情况,还增强了应用健壮性和友好度。 --- ### 总结 综上所述,要彻底修复黑马点评项目中店铺前端显示问题,可以从以下几个方面入手: 1. 验证后端接口响应体是否满足前端需求; 2. 修改 Vue 的 `data()` 定义形式使其遵循框架规范; 3. 改善视图层展现机制以应对动态更新场景。 以上措施能够有效减少潜在隐患并提高整体稳定性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值