Vue

单选框

v-model绑定一组单选框,每个单选框指定相同的属性

     <div>
           
            性别:
            <input v-model="sex" type="radio" value="男" name="sex">男
            <input v-model="sex" type="radio" value="女" name="sex">女
            <span style="color: red">{{sex}}</span>
        </div>
   <script>
        new Vue({
            el:'#app',
            data:{
                sex:"女"
            }
        })
    </script>

v-model绑定单个复选框,绑定一个boolean值

      <div>
           是否同意:<input type="checkbox" v-model="isOk">{{isOk}}
       </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                isOk:false
            }
        })
    </script>

v-model绑定多个个复选框,绑定同一个数组

<div>
       爱好:
            <input v-model="hobbies" type="checkbox" value="抽烟">抽烟
            <input v-model="hobbies" type="checkbox" value="喝酒">喝酒
            <input v-model="hobbies" type="checkbox" value="烫头">烫头
            <input v-model="hobbies" type="checkbox" value="打游戏">打游戏
            <input v-model="hobbies" type="checkbox" value="敲代码">敲代码
            <input v-model="hobbies" type="checkbox" value="睡觉">睡觉
            <input v-model="hobbies" type="checkbox" value="看电影">看电影
            <span style="color: red;">{{hobbies}}</span>
        </div>
   <script>
        new Vue({
            el:'#app',
            data:{
                hobbies:['吃饭','睡觉','打豆豆'],
            }
        })
    </script>

绑定一组单选框,每个单选框指定相同的name属性。

    <div id="app">
        <div>
            性别:
            <input v-model="sex" type="radio" value="男" name="sex">男
            <input v-model="sex" type="radio" value="女" name="sex">女
            <span style="color: pink;">【{{sex}}】</span>
        </div>
    </div>
   <script>
        new Vue({
            el:'#app',
            data:{
                sex:"女"
            }
        })
    </script>

下拉框,绑定一个数组。

单选时:

    <div id="app">
        <div>
            城市:
            <select v-model="checkCity">
                <option value="北京">北京</option>
                <option value="上海">上海</option>
                <option value="南京">南京</option>
                <option value="武汉">武汉</option>
                <option value="深圳">深圳</option>
            </select>
            <span style="color: pink;">{{checkCity}}</span>
        </div>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                checkCity:'南京',
            }
        })
    </script>

多选时 (绑定到一个数组):

下拉框设置multiple属性后,按住ctrl就可以选择多个项

    <div id="app">
        <div>
            喜欢的食物:
            <select multiple v-model="checkFoods">
                <option value="苹果">苹果</option>
                <option value="香蕉">香蕉</option>
                <option value="梨子">梨子</option>
                <option value="汉堡">汉堡</option>
                <option value="薯条">薯条</option>
                <option value="咖啡">咖啡</option>
            </select>
            <span style="color: pink;">{{checkFoods}}</span>
        </div>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                checkFoods:['苹果','香蕉','梨子','汉堡','薯条','咖啡']
            }
        })
    </script>

修饰符/

1.添加了.lazy修饰符,可以将input事件转为change事件

在默认情况下,v-model在每次input事件触发后将输入框的值与数据进行同步。你可以添加 lazy修饰符,从而转为在 change事件之后进行同步:

     姓名:<input type="text" v-model.lazy="name">{{name}}
2.添加了.number修饰符,会自动将你的输入转为number类型
    年龄:<input type="text" v-model.number="age">{{age+20}}
3.添加了.trim修饰符,用于去掉内容的首位空格
    姓名:<input type="text" v-model.lazy.trim="name">开始{{name}}结束
姓名:<input type="text" v-model.lazy.trim="name">开始{{name}}结束

二、绑定事件

@v-on:的简写,通过v-on:指令绑定事件,指定一个methods选项里面的定义的方法。
调用方法时,不传参数,默认会将事件对象作为参数传递。

    <div id="app">
        <button @click="sayHi">sayHi</button>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                age:20
            },
            methods: {
                sayHi(e){
                    console.log(e);
                    alert('Hi')
                }
            },
        })
    </script>

调用方法时,传的是什么参数,接的就是什么参数。

    <div id="app">
        <button @click="sayHello('hello')">sayHello</button>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                age:20
            },
            methods: {
                sayHello(e){
                    console.log(e);
                    alert('Hello~')
                }
            },
        })
    </script>

调用方法时,传递一个$event参数,该参数就是事件对象。

    <div id="app">
        <button @click="sayNice('Nice',$event)">sayNice</button>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                age:20
            },
            methods: {
                sayNice(msg,e){
                    console.log(e);
                    alert(msg)
                }
            },
        })
    </script>

当事件处理的代码比较简单时,可以将代码直接写在行内。
注意:只能操作Vue管理的数据。

    <div>
        年龄:{{age}}
    </div>
    <button @click="age++">年龄++</button>

<meta charset="utf-8">

事件修饰符

.stop用于阻止事件冒泡
.prevent 用于阻止默认行为
.self只能在自身元素上触发,不能在子元素身上触发触发的
.once点击事件将只会触发一次

按键修饰符/

.enter是回车键
.tab是tab键
.delete 是删除键和退格键
.esc是退出键
.space 是空格键
.up 是上箭头
.down 是下箭头
.left 是左箭头
.right是右箭头

    <div>
        <!-- 每次键盘弹起都会调用事件方法 -->
        请输入搜索关键字:<input type="text" @keyup="keyup">
    </div>
    <div>
        <!-- 只有在回车时,才会调用事件方法 -->
        请输入搜索关键字:<input type="text" @keyup.enter="keyup1">
    </div>
new Vue({
            el:'#app',
            data:{
                age:20
            },
            methods: {
                keyup(e){
                    let {keyCode} = e
                    // console.log(keyCode);
                    if (keyCode===13) {
                        alert('搜索指定的商品')
                    }
                    // console.log('111');
                    // console.log(e);
                },
                keyup1(){
                    alert('搜索指定的商品')
                }
            },
        })

三、深度响应式

 new Vue({
            el:'#app',
            data() {
                return {
                    obj:{
                        name:'张三',
                        age:20,
                    },
                    arr:[11,22,33,44,55,66]
                }
            },
            methods: {
                addobj(){
                    this.$set(this.obj,'sex','男')
                },
                delobj(){
                    this.$delete(this.obj, 'age')
                },
                addarr(){
                    this.$set(this.arr, 3, 88)
                },
                delarr(){
                    this.$delete(this.arr,5)
                }
            }
        })

Vue实例,在初始化的时候,会将对象身上的所有数据,做响应式处理,
之后再向对象中添加属性,这些属性就不再具备响应式能力了。
针对数组,只能通过以下方法,才能实现响应式:
push() pop() unshift() shift() splice() reverse() sort()
如何解决上面的问题?
通过Vue的set方法,更新指定的对象属性或数组成员;delete方法,删除指定对象的属性或数组的成员

学生信息:
    <input type="text" v-model="obj.name">
    <input type="text" v-model.number="obj.age"><br>
    <button @click="addobj">添加性别</button><br>
    <button @click="delobj">删除年龄</button>
    <br>
     {{obj}}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容