Vue实现全选按钮

预期效果:点击全选时,所有按钮全部选中,所有按钮全部选中时,全选按钮也自动被选择,但只要有一个按钮未被选中,则全选按钮就不会被选中。

步骤:

1.在头部引入Vue文件。

<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

2.创建一个div并实例化Vue对象,Vue作用范围为div内部。

<div id="app">

</div>
<script>
    var vm=new Vue({
        el:'#app',
        data:{
                    
        }
    })
</script>

3.创建按钮,并为全选按钮绑定v-model属性(双向绑定),其他按钮我们可以使用v-for循环来进行传值实现,同样为其他按钮也进行v-model绑定。({{i.name}}是调用函数,用于接收显示每个按钮名称)。

全选<input type="checkbox" v-model="allCheck" />
			<ul>
				<li v-for="i in list">
					<input type="checkbox" v-model="i.select" />{{i.name}}
				</li>
			</ul>

4.创建数组,数组内存放其他按钮的名称以及状态(状态采用布尔值表示)。

list: [
        { name: '前端', select: false },
        { name: 'UI', select: false },
        { name: '后端', select: false }
    ]

5.在计算属性内书写全选按钮绑定的对象。用every()(用于遍历数组中所有元素,只要有一项不符合要求,便返回false,全符合要求则返回true)实现其他按钮全部被选中时,全选按钮也被选中,用forEach()(用于调用数组的每个元素,并将元素传递给回调函数)实现点击全选按钮其他按钮全部被选中效果。

computed: {

					allCheck: {
						get ()
						{
							return this.list.every( i => i.select )
						},
						set ( val )
						{
							this.list.forEach( element =>
							{
								element.select = val;
							} );
						}
					}
				},

运行效果:

 完整代码:

<!DOCTYPE html>
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>

    <body>
        <div id="app">
            全选<input type="checkbox" v-model="allCheck" />
            <ul>
                <li v-for="i in list">
                    <input type="checkbox" v-model="i.select" />{{i.name}}
                </li>
            </ul>
        </div>
        <script>
            var vm = new Vue( {
                el: '#app',
                data: {
                    list: [
                        { name: '前端', select: false },
                        { name: 'UI', select: false },
                        { name: '后端', select: false }
                    ]
                },
                computed: {
                    allCheck: {
                        get ()
                        {
                            return this.list.every( i => i.select )
                        },
                        set ( val )
                        {
                            this.list.forEach( element =>
                            {
                                element.select = val;
                            } );
                        }
                    }
                }
            } )
        </script>
    </body>

</html>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tԅ(¯ㅂ¯ԅ)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值