programing

v-model 특성을 확인란에 추가하면 모두 확인 작업이 중지됨

bestcode 2022. 7. 13. 23:18
반응형

v-model 특성을 확인란에 추가하면 모두 확인 작업이 중지됨

v-model을 사용하여 어레이의 각 확인란 값을 가져오려고 하면 모두 확인 기능이 작동을 중지합니다.stackoverflow를 포함한 여러 포털에서 많은 질문을 읽었는데, 사람들은 v-model이:체크된 특성에서는 작동하지 않는다고 합니다.이 속성은 이해하지만 이를 작동시키기 위한 솔루션/대체 코드를 찾을 수 없습니다.

내가 시도한 첫 번째 코드는 첫 번째 체크박스를 사용하여 모든 체크박스를 선택하는 것이었다.이거 잘 되네.아래 코드:

new Vue({
  el: "#app",
  data: {
    selectAll:false
  },
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <label>
    <input type="checkbox" v-model="selectAll">
    Select all
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 1">
    Item 1
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 2">
    Item 2
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 3">
    Item 3
  </label>
</div>

두 번째 시도된 코드는 배열 내의 각 체크박스의 값을 가져오는 것이었는데, 이 경우 '모두 선택'이 자동으로 작동을 중지합니다.아래 코드:

new Vue({
  el: "#app",
  data: {
    selectAll:false,
    eachCheckbox: [],
  },
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <label>
    <input type="checkbox" v-model="selectAll">
    Select all
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 1" v-model="eachCheckbox">
    Item 1
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 2" v-model="eachCheckbox">
    Item 2
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 3" v-model="eachCheckbox">
    Item 3
  </label>
  <br>
  Selected checkbox values: {{eachCheckbox}}
  
</div>

난 이걸 어떻게 해야 할지 모르겠어.누가 좀 도와줄래요?

사용하다Vue.setAPI 호출이 완료되면 체크박스 배열에 개체를 만듭니다.

이것은 2.5초 걸리는 모의 비동기 API 콜을 나타내고 있습니다.

new Vue({
  el: '#app',
  data () {
    return {
      loading: false,
      checkall: false,
      checkboxes: []
    }
  },
  methods: {
    toggleAll () {
      this.checkall = !this.checkall
      this.checkboxes.forEach(c => {
        c.checked = this.checkall
      })
    }
  },
  watch: {
    checkboxes: {
      deep: true,
      handler: function () {
        this.checkall = this.checkboxes.every(c => c.checked)
      }
    }
  },
  mounted () {
    // simulate an async api call which takes 2.5 seconds to complete
    this.loading = true
    
    setTimeout(() => {
      Array.from(Array(3), (c, i) => ({ checked: false, text: `Option ${i + 1}` })).forEach((c, i) => {
        Vue.set(this.checkboxes, i, c)
      })
      this.loading = false
    }, 2500)
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <input type="checkbox" @click="toggleAll" v-model="checkall"/> Check All<br/>
  <div v-for="(c, i) in checkboxes" :key="i">
    <input type="checkbox" v-model="c.checked"/>{{ c.text }}<br/>
  </div>
  <p v-if="!loading">Checked: {{ checkboxes.filter(c => c.checked).map(c => c.text).join(',') }}</p>
  <p v-else>Fetching data...</p>
</div>

전에도 같은 문제에 직면했지만 좋은 해결책을 찾지 못했지만, 다음과 같은 것을 시도해 보았습니다.

new Vue({
  el: "#app",
  data: {
    selectAll: false,
    eachCheckbox: [],
  },
  methods: {
    selectAllItems() {

      this.selectAll ? this.eachCheckbox = ["Item 1", "Item 2", "Item 3"] : this.eachCheckbox = [];
    }

  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <label>
    <input type="checkbox" v-model="selectAll" @change="selectAllItems">
    Select all
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 1" v-model="eachCheckbox">
    Item 1
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 2" v-model="eachCheckbox">
    Item 2
  </label>
  <br>
  <label>
    <input type="checkbox" :checked="selectAll" value="Item 3" v-model="eachCheckbox">
    Item 3
  </label>
  <br> Selected checkbox values: {{eachCheckbox}}

</div>

언급URL : https://stackoverflow.com/questions/53686617/check-all-stops-working-when-i-add-v-model-attribute-to-the-checkboxes

반응형