Vue.js入门学习--表单input的绑定(六)

完整案列demo



<html>

<head>
    <title>表单input绑定</title>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>

<body>
    <div id="app">
        增加一个喜欢的球星:
        <input @keyup.13="addStar" v-model="star">
        <br/>
        <br/>
        <!--  v-model 绑定到checked属性 -->
        <input type="checkbox" id="kobe" @click="setName($event)" v-model="checkedKobe">
        <label for="kobe">科比</label>
        <input type="checkbox" id="james" @click="setName($event)" v-model="checkedJames">
        <label for="james">詹姆斯</label>
        <input type="checkbox" id="jordan" @click="setName($event)" v-model="checkedJordan">
        <label for="jordan">乔丹</label>
        <br/>
        <br/> 你喜欢的球星有:
        <span v-for="name in names">{{ name }} </span>
    </div>
    <br/>
    <br/>
    <div id="app2">
        增加一个喜欢的球星:
        <input @keyup.enter="addStar" v-model="star">
        <br/>
        <br/>
        <!-- v-model 绑定names数组,如当前DOM对象被选中将其value属性值加进names数组中 反之移除-->
        <input type="checkbox" value="科比" v-model="names">
        <label for="kobe">科比</label>
        <input type="checkbox" value="詹姆斯" v-model="names">
        <label for="james">詹姆斯</label>
        <input type="checkbox" value="乔丹" v-model="names">
        <label for="jordan">乔丹</label>
        <br/>
        <br/> 你喜欢的球星有:
        <span v-for="name in names">{{ name }} </span>
    </div>


</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            star: '史蒂芬·库里',
            names: ['科比'],
            checkedKobe: true,
            checkedJames: false,
            checkedJordan: false
        },
        methods: {
            setName: function (event) {
                if (event && event.currentTarget.id === 'kobe') {
                    //!this.checkedKobe -- 自身取反,如果是true,勾选之后就是false,反之则是true
                    if (!this.checkedKobe === true) {
                        this.names.push('科比')
                    } else { //否则,移除当前喜欢的球星
                        for (var i = 0; i < this.names.length; i++) {
                            var name = this.names[i]
                            if (name === '科比') {
                                this.names.splice(i, 1)
                            }
                        }
                    }
                } else if (event && event.currentTarget.id === 'james') {
                    if (!this.checkedJames === true) {
                        this.names.push('詹姆斯')
                    } else {
                        for (var i = 0; i < this.names.length; i++) {
                            var name = this.names[i]
                            if (name === '詹姆斯') {
                                this.names.splice(i, 1)
                            }
                        }
                    }
                } else {
                    if (!this.checkedJordan === true) {
                        this.names.push('乔丹')
                    } else {
                        for (var i = 0; i < this.names.length; i++) {
                            var name = this.names[i]
                            if (name === '乔丹') {
                                this.names.splice(i, 1)
                            }
                        }
                    }
                }
            },
            addStar: function () {
                var isExists = false;
                for (var i = 0; i < this.names.length; i++) {
                    var name = this.names[i]
                    //如果喜欢的球星里面有star,则star存在标记置为true,循环终止
                    if (name === this.star) {
                        isExists = true;
                        break;
                    }
                }
                //只有star不存在的时候,才往names数组里面添加star
                if (!isExists) {
                    this.names.push(this.star)
                }
            }
        }
    })


    new Vue({
        el: '#app2',
        data: {
            star: '史蒂芬·库里',
            names: [],

        },
        methods: {
            addStar: function () {
                var isExists = false;
                for (var i = 0; i < this.names.length; i++) {
                    var name = this.names[i]
                    //如果喜欢的球星里面有star,则star存在标记置为true,循环终止
                    if (name === this.star) {
                        isExists = true;
                        break;
                    }
                }
                //只有star不存在的时候,才往names数组里面添加star
                if (!isExists) {
                    this.names.push(this.star)
                }
            }
        }
    })
</script>

</html>



一、如果input的类型是textbox,则下面v-model双向绑定的值为其对应的value属性



(1)DOM




@keyup.13  === v-on:keyup.enter 

13  === 键盘上enter键的 code值



(2)数据模板




star给个初始值


方法addStar将在按键enter键抬起的时候触发




(3)显示






二、如果input的类型是checkbox,则下面v-model双向绑定的值为其对应的checked属性



(1)DOM




@click === v-on:click

其监听setName方法的执行,其中参数为当前DOM事件对象自身




(2)数据模板(JavaScript代码处理复选框的checked属性的变化,根据变化捕捉用户喜欢的球星)






(3)显示




三、如果input的类型是checkbox,则下面v-model双向绑定的值是被选中的DOM元素的属性value数组


(1)DOM






(2)数据模板






(3)显示





四、完整demo效果演示









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值