Vue基础学习笔记(六)之表单控件绑定/双向数据绑定

6、表单控件绑定/双向数据绑定

表单绑定(v-model)

input text
<body>
    <div id="box">
        <input type="text" v-model="mytext"/>
        {
   
   {mytext}}
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#box',
            data:{
                mytext:'11111'
            }
        })
    </script>
</body>

实现效果:

在这里插入图片描述

textarea文本框
<body>
    <div id="box">
        {
   
   {mytext}}
        <textarea type="text" v-model="mytext"></textarea>
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#box',
            data:{
                mytext:'11111',
            }
        })
    </script>
</body>

实现效果:
在这里插入图片描述

checkbox多选框
<body>
    <div id="box">
			记住用户名:<input type="checkbox" v-model="isChecked"/>
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#box',
            data:{
                isChecked:false,
            }
        })
    </script>
</body>

实现效果:

在这里插入图片描述

可以根据一个状态来判断是否选择。

双向数据绑定(v-model)

Checkbox 双向绑定
<body>
    <div id="box">
<!--  双向绑定-----1、绑定的是一个数组-----2、每一个checkbox控件都有一个value值-->
        <input type="checkbox" v-model="checkedgroup" value="vue" >vue
        <input type="checkbox" v-model="checkedgroup" value="react">react
        <input type="checkbox" v-model="checkedgroup" value="jquery">jquery
        {
   
   {checkedgroup}}
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#box',
            data:{
                checkedgroup:[],//用来记录用户选择了什么,并可提交给后端------双向绑定
            }
        })
    </script>
</body>
radio单选框双向绑定
<body>
    <div id="box">
<!---------radio单选框-------------->
        <br>
<!--name 保证在一个段内,可以进行单选的--------value给每个控件添加value值-->
        <input type="radio" v-model="picked" name="favor" value="vue">vue
        <input type="radio" v-model="picked" name="favor" value="react">react
        <input type="radio" v-model="picked" name="favor" value="jquery">jquery
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#box',
            data:{
                picked:''
            }
        })
    </script>
</body>

购物车

    <style>
        ul li{
            list-style: none;
        }
    </style>
</head>
<body>
    <div id="box">
        <ul>
            <li v-for="data in datalist" :key="data.id">
                <input type="checkbox" v-model="checkgroup" :value="data" @change="handleItemChange"/>
                {
   
   {data}}
                <br>
                <button @click="data.number++">add</button>
                <button @click="handleDel(data)">del</button>
                <br>
                <!-----用来控制输入想要购买的数量  ------>
                <span>购买的商品数量:<input type="number" v-model="data.number"/></span>
            </li>
        </ul>
        全选/全不选:<input type="checkbox" @change="handleChange" v-model="isAllChecked"/>
<!--        {
   
   {checkgroup}}-->
        <p>总金额计算:{
   
   {getSum()}} (元)</p>
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#box',
            data:{
                checkgroup:[],
                isAllChecked:false,
                datalist:[
                    {
                        name:'商品1',
                        price:10,
                        number:1,
                        id:'1',
                    },
                    {
                        name:'商品2',
                        price:20,
                        number: 2,
                        id: '2',
                    },
                    {
                        name:'商品3',
                        price:30,
                        number: 3,
                        id: '3',
                    }
                ]
            },
            methods:{
                //函数表达式----进行购物车勾选的数据累加
                getSum(){
                    var sum = 0;
                    for (var i in this.checkgroup){
                        sum += this.checkgroup[i].number * this.checkgroup[i].price;
                    }
                    return sum;
                },
                //全选/全不选的触发
                handleChange(){
                    // console.log('handleChange',this.isAllChecked)
                    //如果为true则全选,否则全不选
                    if (this.isAllChecked){
                        this.checkgroup = this.datalist;
                    }else{
                        this.checkgroup = [];
                    }
                },
                //每个小单元的触发
                handleItemChange(){
                    //只有全选的时候isAllChecked才为true,其余的时候为false
                    if (this.checkgroup.length===this.datalist.length){
                        this.isAllChecked = true;
                    }else{
                        this.isAllChecked = false;
                    }
                },
                //减少或删除商品数量-------购物车内该条数量最少为1----
                handleDel(data){
                    data.number --;
                    if (data.number <= 0){
                        data.number=1;
                    }
                },
            }
        })
    </script>
</body>

实现效果:
在这里插入图片描述

修饰符

  • .lazy 失去焦点同步一次
    • 不适用于模糊查询,因为模糊查询需要实时更新
<body>
    <div id="box">
        <input type="text" v-model.lazy="name"/>
        {
   
   {name}}
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el:'#box',
            data:{
                name:"zwj",
                age:18,
                mytext:'漂亮'
            }
        })
    </script>
</body>

在这里插入图片描述

  • .number 格式化数字
   <input type="number" v-model.number="age"/>
        {
   
   {age}}

只能输入数字

  • .trim 去除首尾空格
 <input type="text" v-model="mytext">
        {
   
   {mytext}}

在这里插入图片描述

Vue组件

见《Vue组件学习笔记(一)之axios与fetch实现数据请求、计算属性》

猜你喜欢

转载自blog.csdn.net/FemaleHacker/article/details/107671057