- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
- <body>
- <div id="app">
- <input type="checkbox" v-model="flag">全选
- <ul>
- <li v-for="(item, index) in list" :key="index"><input type="checkbox" name="" id="" v-model="item.show">{{item.name}}</li>
- </ul>
- </div>
- </body>
- </html>
- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
- <script>
- const obj = new Vue({
- el: '#app',
- data: {
- list: [
- { show: false, name: 'zs' },
- { show: true, name: 'ls'},
- { show: false, name: '大西瓜'},
- { show: true, name: '夏普'}
- ]
- },
- methods: {
- },
- computed: { // 计算属性比事件好的优势在于计算属性有缓存
- flag: {
- get() {
- let shows = null
- let obj = []
- this.list.forEach(item => {
- if(item.show === true) {
- obj.push(item) // 将list中的每一项为true添加到新数组中, 只有所有都为true的情况下说明list的每一项都为true了,即obj的长度等于list的长度
- }
- })
- if(obj.length === this.list.length) {
- shows = true
- } else {
- shows = false
- }
- return shows
- },
- set(value) {
- this.list.forEach(item => {
- item.show = value
- })
- }
- }
- }
- })
- </script>