簡體   English   中英

從vue.js組件讀取復選框值

[英]Reading checkbox values from vue.js component

幾天前,我開始使用vue.js並試圖擺脫困境。

為了使這個簡單的示例生效,我一直在擺弄很多東西:使用vue.js讀取組件中選定復選框的值。

請在http://jsbin.com/gukoqo/edit?html,js,output上查看我的示例

怎樣才能讓我selected在父實例包含復選框的選中值? 例如,選擇了filter_a和filter_c,然后selected應包含一個數組: ['filter_a', 'filter_c']

我希望vue.js可以使此操作非常容易,但是還不知道如何做。 任何人? :)

我正在使用最新的vue.js(目前為2.3.3)

一種可能的方式。

Vue.component('facet-filter', {
  props: ['filter', 'checked'],

  template: `<div>
              <label class="form-check-label">
                <input @change="$emit('change', filter.text, $event)" 
                       class="form-check-input" 
                       type="checkbox" 
                       :value="filter.text" 
                       :checked="checked" 
                       name="filters"> {{filter.text}}
              {{$props | json 2}}</label>
            </div>`,
});

new Vue({
  el: '#app',
  data: {
    filterFacets: [
      { id: 0, text: 'filter_a' },
      { id: 1, text: 'filter_b' },
      { id: 2, text: 'filter_c' },
      { id: 3, text: 'filter_d' },
    ],
    selected: [], // How can I let this contain ['filter_a', 'filter_b'] etc. when selected?
  },
  methods:{
    onChange(filter, $event){
      if ($event.target.checked)
        this.selected.push(filter)
      else {
        const index = this.selected.findIndex(f => f === filter)
        if (index >= 0)
          this.selected.splice(index, 1)
      }
    }
  }
});

並將模板更改為

<div id="app">
  <facet-filter
    v-for="item in filterFacets"
    v-bind:filter="item"
    v-bind:checked="selected.includes(item.text)"
    :key="item.id"
    @change="onChange"
    >
  </facet-filter>
  <p><pre>data: {{$data | json 2}}</pre></p>
</div>

更新了bin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM