VueJS中如何根据API响应设置一对按钮的默认值?
解决按钮状态初始化与切换问题
先给你指出现有代码里的几个明显问题,这些可能是导致你功能异常的原因:
role属性语法错误:应该写成role="button",不要多余的your text内容- 方法名不一致:一个按钮绑定的是
setMandatory,另一个是setisMandatory,大小写不统一会导致点击无效 - 按钮文本的双引号是多余的:直接写
No和Yes即可,不需要用双引号包裹
你的需求是页面加载时根据API返回结果设置一次按钮状态,不需要用 v-if(v-if 是用来控制元素显示/隐藏的,这里两个按钮都要保留,只是切换样式状态),正确的实现方式如下:
完整代码示例
<template> <div class="small-7 column btn-switch"> <span class="switch-statement">Is it mandatory</span> <!-- 切换"No"按钮的样式 --> <button :class="!isMandatory ? 'button--secondary' : 'button--tertiary'" class="button button-border" @click="setMandatory(false)" > No </button> <!-- 切换"Yes"按钮的样式 --> <button :class="isMandatory ? 'button--secondary' : 'button--tertiary'" class="button" role="button" @click="setMandatory(true)" > Yes </button> </div> </template> <script> export default { data() { return { // 初始化状态,等待API返回后赋值 isMandatory: null }; }, mounted() { // 页面加载时调用API,仅执行一次 this.fetchMandatoryStatus(); }, methods: { async fetchMandatoryStatus() { try { // 替换成你的API请求逻辑 const response = await fetch('/api/get-mandatory-status'); const data = await response.json(); // 根据API返回结果设置状态 this.isMandatory = data.isMandatory; } catch (error) { console.error('获取状态失败:', error); // 异常情况下可以设置默认值 this.isMandatory = false; } }, setMandatory(status) { // 这里可以添加点击后的逻辑,比如调用API更新状态(如果需要) this.isMandatory = status; } } }; </script>
关键说明
- 初始化状态:在
data里定义isMandatory初始值为null,确保API返回前不会有错误的样式渲染 - 页面加载时获取状态:在
mounted钩子中调用API,这个钩子只会在页面首次加载时执行一次,符合你的需求 - 动态样式绑定:通过
:class根据isMandatory的值切换按钮的激活样式,不需要隐藏/显示按钮 - 统一方法名:两个按钮都调用
setMandatory方法,传入不同的状态值,保证逻辑一致性
内容的提问来源于stack exchange,提问作者ajith sadanandan
相关产品推荐
相关产品推荐

