当前位置: 首页 > 知识库问答 >
问题:

前端 - 把别人的后端接口数据导入到自己新的接口项目,接口请求后为什么不管点击哪个模块都会跳转到同一个页面?

空俊语
2024-12-17

把别人的后端接口数据导入到自己新的接口项目后,接口地址改成自己的之后,写service.stype == 10 || service.stype == 15 || service.stype == 20,然后不管点击哪个模块都是跳转到同一个页面是为什么?
例如点击开心取药或上门助浴都是跳转到下方的那个页面
image.png
前端代码:

<template>
<view>
<block v-if="service.stype == 10 || service.stype == 15 || service.stype == 20 ">
    <view class="pub-box">
        <view class="pub-box-bd">
            <view class="weui-cell weui-cell_input">
                .....//功能1
            </view>
            <view class="weui-cell weui-cell_input">
                ....//功能2
            </view>
            <view class="weui-cell weui-cell_input" @click="onClientChange">
                ....//功能3
            </view>
        </view>
    </view>
</block>
</template>

<script setup>部分数据:

import { ref, reactive ,computed,toRaw} from 'vue'
import {onLoad} from '@dcloudio/uni-app'
const app = getApp()
onLoad((options) => {
    console.log(options,'options')
    main_load(options)
})
//页面服务详情数据
const service = ref({})

const main_load = (options) => {
    app.globalData.utils.request({
        url:'/Service/order',
        data:{
            svid:options.svid
        },
        success:(res) => {
            console.log(res)
            service.value = res.data.service; 
        }
    })
}

后端部分数据:

{
    "code": 10000,
    "msg": "",
    "time": "1707110701",
    "data": {
        "now": 1707110701,
        "services": [
            {
                "id": 1,
                "code": "dp",
                "stype": "40",
                "name": "代跑取药",
                "intro": "人工带跑取药,省时省力",
                "price": "0.01",
                "priceo": "100.00",
                "use_switch": 1,
                "stype_text": "Stype 40"
            },
            {
                "id": 2,
                "code": "pz",
                "stype": "15",
                "name": "就医陪诊(半天)",
                "intro": "就医陪诊,值得托付",
                "price": "0.01",
                "priceo": "150.00",
                "use_switch": 1,
                "stype_text": "Stype 15"
            }
        ]
    }
}

{
    "code": 10000,
    "msg": "",
    "time": "1700982698",
    "data": {
        "now": 1700982698,
        "navs": [
            {
                "id": 3,
                "stype": "1",
                "stype_link": "/pages/service/index?svid=1&hid=5",
                "title": "开心取药",
                "tcolor": "",
                "cat_text": "",
                "stype_text": "Stype 1"
            },
            {
                "id": 4,
                "stype": "1",
                "stype_link": "/pages/service/index?svid=4&hid=5",
                "title": "上门助浴",
                "tcolor": "",
                "cat_text": "",
                "stype_text": "Stype 1"
            }
        ],
    }
}

..

共有1个答案

钱志义
2024-12-17
### 解答

问题出现的原因是在你的前端代码中,`service.stype` 的值并未根据点击的模块动态更新,而是一直保持为初始加载时的值或者是最后一次请求返回的服务详情中的 `stype` 值。这导致了不管点击哪个模块,只要 `service.stype` 的值符合 `10`, `15`, 或 `20` 中的任意一个,就会渲染同一个页面块。

具体来说,问题出在以下几个方面:

1. **service 数据未根据点击事件更新**:
   你的代码中只有一个地方更新了 `service`,即 `main_load` 函数中根据 `options.svid` 请求数据。这意味着无论用户点击哪个模块,只要 `svid` 相同,`service` 的值就会一样。

2. **错误的条件判断**:
   你的模板代码 `<block v-if="service.stype == 10 || service.stype == 15 || service.stype == 20 ">` 只会检查 `service.stype` 是否为 10, 15, 或 20,并不根据导航项的 `stype` 来动态渲染内容。

### 解决方案

为了解决这个问题,你需要确保每个导航项点击时能够正确加载对应的服务详情,并且根据服务的 `stype` 动态渲染不同的页面内容。以下是可能的解决方案:

1. **修改导航项的点击事件**:
   为每个导航项添加点击事件处理器,确保点击时能够更新 `service` 的值。

2. **动态渲染页面内容**:
   根据 `service.stype` 的值动态渲染不同的页面内容,而不是只检查固定的几个值。

例如,你可以修改你的导航项点击事件处理器如下:

<template>
<view>

<block v-for="nav in navs" :key="nav.id">
  <view @click="onNavClick(nav)">
    {{ nav.title }}
  </view>
</block>
<block v-if="service.stype">
  <!-- 根据 service.stype 动态渲染内容 -->
  <view v-if="service.stype == 10">
    <!-- 渲染 stype 为 10 的内容 -->
  </view>
  <view v-else-if="service.stype == 15">
    <!-- 渲染 stype 为 15 的内容 -->
  </view>
  <view v-else-if="service.stype == 20">
    <!-- 渲染 stype 为 20 的内容 -->
  </view>
  <!-- 其他 stype 的处理 -->
</block>

</view>
</template>

<script setup>
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'

const app = getApp()
const navs = ref([
// 导航项数据,从后端获取或静态定义
])
const service = ref({})

const onNavClick = (nav) => {
main_load({ svid: nav.svid })
}

const main_load = (options) => {
app.globalData.utils.request({

url: '/Service/order',
data: {
  svid: options.svid
},
success: (res) => {
  console.log(res)
  service.value = res.data.service; 
}

})
}

onLoad(() => {
// 初始加载逻辑,可能需要从后端获取导航项数据
// 例如:app.globalData.utils.request({ url: '/path/to/navs', success: (res) => { navs.value = res.data.navs } })
})
</script>


注意:这里的 `navs` 数据需要从后端获取或者静态定义,确保包含所有导航项的信息。
 类似资料:
  • 问题如题: 后端提供了一个接口地址是用来查询用户信息的,用管理员账号进入菜单则没有任何问题,但是换一个普通用户则请求都发不出去。 1.发送请求的截图 2.请求不通那个账号的请求截图 排查方式: 1.通过postman请求nginx,设置不同token,管理员token正常返回,普通用户token,则长时间等待后,返回nginx的404页面。 2.通过postman请求后端gateway网关应用,使

  • 问题内容: 我的意思是: 我用谷歌搜索,发现了这个: 表示定义接口方法的实现。但是接口没有实现,因此是不可能的。 但是,interface是100%抽象的类,抽象类可以实现接口(100%抽象的类)而无需实现其方法。将其定义为“接口”时会出现什么问题? 详细来说, 问题答案: 表示实现,当旨在声明仅提供不提供实现时。 A 100%,是功能上等同于,但它也可以实现,如果你想(在这种情况下,它不会保持1

  • Ajax 是一种不需要刷新页面就可以与服务器交换数据的方法。 关于 Ajax 相关的知识请参考 jQuery-Ajax、jQuery-AJAX - W3School 及 Ajax 教程 一、jQuery 中 Ajax 相关的函数 在 jQuery 中,有三种 Ajax 相关的方法,分别是:ajax、get、post。 1、jQuery.ajax 统一的发送 Ajax 请求函数,简单的使用示例如下:

  • 上一步中我们已经定义好了Server接口,并进行了多次重构,但是实际上那个Server是没啥毛用的东西。现在要为其添加真正有用的功能。大师说了,饭要一口一口吃,衣服要一件一件脱,那么首先来定个小目标——启动ServerSocket监听请求,不要什么多线程不要什么NIO,先完成最简单的功能。下面还是一步一步来写代码并进行重构优化代码结构。 关于Socket和ServerSocket怎么用,网上很多文

  • 我对Socket和ServerSocket端口用法感到困惑。Oracle关于套接字的Java教程是这样说的: 插座是什么? 通常,服务器运行在特定的计算机上,并具有绑定到特定端口号的套接字。服务器只是等待,监听套接字让客户机发出连接请求。在客户端:客户端知道服务器运行的机器的主机名和服务器侦听的端口号。要发出连接请求,客户端尝试在服务器的机器和端口上与服务器会合。客户端还需要向服务器标识自己,以便

  • el-image的src赋值了一个接口中返回的图片地址,为什么接口请求了两次呢? 给el-iamge设置key和更改lazy的状态都没有区别,还是加载了两次 currentPicture初始是null,是通过接口拿到图片完整地址进行赋值的

  • 我基本上想要一个EC2,一个接口在公共子网,一个在私有子网。我应该能够通过公共接口从外界SSH,私有网络将用于与私有网络中的数据库通信。 在地形上。。。 我在该 VPC 中创建了一个 VPC,两个子网(一个公共子网,一个私有子网)。 创建了一个互联网网关,即 VPC 中的路由表,其路由为 0.0.0.0/0 至 IGW 已在与公有子网和路由表之间创建路由关联。 已创建一个 EC2 实例,其中一个接