Vue2.0 单(多)选框绑定对象的问题

发布于 2022-09-04 00:36:06 字数 1001 浏览 27 评论 0

Template:

<dl class="attribute" v-for="attribute in attributes">
  <dt>{{attribute.name}}</dt>
  <dd>
    <label v-for="value in attribute.values" v-bind:class="selectedAttributes['attr-'+attribute.id] == value.id ? 'selected' : ''">
      <input type="radio" name="a" v-bind:value="value.id" v-model="selectedAttributes['attr-'+attribute.id]">
      {{value.name}}
    </label>
  </dd>
</dl>

JS:

export default {
  data () {
    return {
      selectedAttributes: {}
    }
  }
}

效果图:

clipboard.png

想要实现的效果:

点击label “AA”,则对应的radio/checkbox为选中,同时label背景色改变

遇到的问题:

【点击label “AA”,则对应的radio/checkbox为选中】可以实现,对应的【selectedAttributes】的值也能改变,但是【同时label背景色改变】实现不了。。
因为属性和属性的可选值都是循环出来的,绑定model就成问题了。。所以,想问问这种情况下,有没有什么好的解决方案?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

远山浅 2022-09-11 00:36:06

这种情况下用css3 就最合适了

  <label v-for="item in items">
        <input type="checkbox" name="choose" class="choose"
               v-model="checkboxItem"
               value="{{ item.val }}">
        <i class="bg"></i>
        <span class="text">{{ item.val }}</span>
  </label>
    
<style scoped>
    label{
        margin: 10px;
        position: relative;
        width: 50px;
        height: 35px;
    }
    
    .text{
        display:block;
        width:100%;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;
        z-index: 8;
    }
    
    .bg{
        display: block;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        border: 1px solid #ccc;
        background: #fff;
    }
    .choose{
        width: 100%;
        height: 100%;
        margin: 0;
        position: absolute;
        top: 0;
        left: 0;
        z-index: 9;
    }
    .choose:checked + .bg {
        background: red;
    }
</style>            
            
            
            
            
            
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文